//
// Air Force One
//

#include "stagesetup.h"

// Characters
#define CHR_ELVIS      0x00
#define CHR_PRESIDENT  0x18
#define CHR_PILOT1     0x19
#define CHR_PILOT2     0x1a
#define CHR_STEWARDESS 0x1b
#define CHR_STEWARD    0x1c
#define CHR_TAKER1     0x2a
#define CHR_TAKER2     0x2b
#define CHR_TRENT      0x32
#define CHR_BLONDE1    0x33
#define CHR_BLONDE2    0x34

// Objects
#define OBJ_EQUIPMENT              0x00
#define OBJ_DATAUPLINK_BOND        0x01
#define OBJ_COMMSHUB1              0x02
#define OBJ_AUTOPILOT_SWITCH       0x03
#define OBJ_REMOTEMINE_BOND        0x04
#define OBJ_DUMBWAITER1            0x05
#define OBJ_DUMBWAITER2            0x06
#define OBJ_DUMBWAITER1_SWITCH     0x07
#define OBJ_DUMBWAITER2_SWITCH     0x08
#define OBJ_FLOORHATCH             0x0b
#define OBJ_COCKPITDOOR            0x0e
#define OBJ_DATAUPLINK_COOP        0x16
#define OBJ_REMOTEMINE_COOP        0x17
#define OBJ_EQUIPMENT_SWITCH       0x1e
#define OBJ_HOVERBIKE_SWITCH       0x21
#define OBJ_KEYCARD                0x22
#define OBJ_ESCAPE_POD             0x24
#define OBJ_EXTERIOR_DOOR          0x25
#define OBJ_EXTERIOR_DOOR_DETACHED 0x26
#define OBJ_COMMSHUB2              0x27
#define OBJ_COMMSHUB3              0x28
#define OBJ_COMMSHUB4              0x29
#define OBJ_COMMSHUB5              0x2a
#define OBJ_FLOOR_HATCH_DETACHED   0x2e
#define OBJ_EQUIPMENT_COOP         0x3a

// Stage flags
#define STAGEFLAG_POD_DESTROYED              0x00000004
#define STAGEFLAG_ALL_OBJECTIVES_COMPLETE    0x00000008
#define STAGEFLAG_PLANE_NOSEDIVING           0x00000010
#define STAGEFLAG_BOND_MINE_WASTED           0x00000020
#define STAGEFLAG_COOP_MINE_WASTED           0x00000040
#define STAGEFLAG_AI_BUDDY_EXISTS            0x00000080
#define STAGEFLAG_PRESIDENT_STARTED_RUNNING  0x00000100
#define STAGEFLAG_PRESIDENT_AT_POD           0x00000200
#define STAGEFLAG_UFO_ATTACHMENT_DAMAGED     0x00000800
#define STAGEFLAG_KILLED_NEUTRALS            0x00001000
#define STAGEFLAG_PILOTS_DEAD                0x00002000
#define STAGEFLAG_PLANE_STABILIZED           0x00004000
#define STAGEFLAG_AUTOPILOT_DESTROYED        0x00008000
#define STAGEFLAG_PRESIDENT_DEAD             0x00010000
#define STAGEFLAG_BOTH_BLONDES_DEAD          0x00020000
#define STAGEFLAG_ONE_BLONDE_DEAD            0x00040000
#define STAGEFLAG_PRESIDENT_CALLED_SECURITY  0x00080000
#define STAGEFLAG_00100000                   0x00100000
#define STAGEFLAG_INTRO_FINISHED             0x00200000
#define STAGEFLAG_TRIGGER_MIDCUTSCENE        0x00400000
#define STAGEFLAG_MIDCUTSCENE_FINISHED       0x00800000
#define STAGEFLAG_EQUIPMENT_RAISED           0x01000000
#define STAGEFLAG_EQUIPMENT_SWITCH_DESTROYED 0x02000000
#define STAGEFLAG_BOTH_MINES_WASTED          0x04000000
#define STAGEFLAG_PRESIDENT_INJURED          0x08000000
#define STAGEFLAG_PLANE_CRASHED              0x10000000
#define STAGEFLAG_MIDCUTSCENE_STARTED        0x20000000

// AI Lists
#define AILIST_INIT_STRIPES        0x0401
#define AILIST_INIT_ELVIS          0x0402
#define AILIST_STRIPES             0x0403
#define AILIST_PRESIDENT_RUNNING   0x0404
#define AILIST_PRESIDENT_IN_ROOM   0x0405
#define AILIST_INIT_PRESIDENT      0x0406
#define AILIST_STEWARD             0x0407
#define AILIST_STEWARDESS          0x0408
#define AILIST_DEFEND_PAD          0x040a
#define AILIST_DEFEND_PRESIDENT    0x040b
#define AILIST_INIT_DEFEND_PAD     0x040c
#define AILIST_TAKER1              0x040f
#define AILIST_TAKER2              0x0410
#define AILIST_TYPING_GUY          0x0411
#define AILIST_SITTING_GUY         0x0412
#define AILIST_TAKER               0x0413
#define AILIST_COCKPIT_STRIPES     0x0414
#define AILIST_CLONER1             0x0415
#define AILIST_INIT_CLONE1         0x0416
#define AILIST_CLONE1              0x0417
#define AILIST_CLONER2             0x0418
#define AILIST_INIT_CLONE2         0x0419
#define AILIST_CLONE2              0x041a
#define AILIST_CLONER3             0x041b
#define AILIST_INIT_CLONE3         0x041c
#define AILIST_CLONE3              0x041d
#define AILIST_BLONDE              0x041e
#define AILIST_INIT_BLONDE         0x041f
#define AILIST_TRENT_ATTACKING     0x0420
#define AILIST_TRENT_WAITING       0x0421
#define AILIST_TRENT_RUNNING       0x0422
#define AILIST_OUTRO               0x0423
#define AILIST_MIDCUTSCENE         0x0424
#define AILIST_STEWARD_SHOT        0x0425
#define AILIST_BE_UNALERT          0x0429
#define AILIST_INIT_NEUTRAL        0x042a
#define AILIST_REINIT_STRIPES      0x042b
#define AILIST_REMOVE_IF_OFFSCREEN 0x042c

extern s32 intro[];
extern u32 props[];
extern struct path paths[];
extern struct ailist ailists[];

struct stagesetup setup = {
	NULL,
	NULL,
	NULL,
	intro,
	props,
	paths,
	ailists,
	NULL,
};

u32 props[] = {
	briefing(BRIEFINGTYPE_LOCATION, L_RIT_001)
	briefing(BRIEFINGTYPE_TEXT_PA,  L_RIT_000)
	briefing(BRIEFINGTYPE_TEXT_SA,  L_RIT_002)
	briefing(BRIEFINGTYPE_TEXT_A,   L_RIT_003)

	beginobjective(0, L_RIT_005, (DIFFBIT_SA | DIFFBIT_PA | DIFFBIT_PD)) // "Locate and retrieve equipment"
		require_object_collected(OBJ_EQUIPMENT)
		fail_flags(STAGEFLAG_EQUIPMENT_SWITCH_DESTROYED)
	endobjective

	beginobjective(1, L_RIT_006, (DIFFBIT_A | DIFFBIT_SA | DIFFBIT_PA | DIFFBIT_PD)) // "Locate President"
		complete_flags(STAGEFLAG_PRESIDENT_STARTED_RUNNING)
		fail_flags(STAGEFLAG_PRESIDENT_CALLED_SECURITY)
	endobjective

	beginobjective(2, L_RIT_007, (DIFFBIT_A | DIFFBIT_SA | DIFFBIT_PA | DIFFBIT_PD)) // "Get President to escape capsule"
		complete_flags(STAGEFLAG_PRESIDENT_AT_POD)
		fail_flags(STAGEFLAG_PRESIDENT_DEAD)
		fail_flags(STAGEFLAG_KILLED_NEUTRALS)
		fail_flags(STAGEFLAG_POD_DESTROYED)
	endobjective

	beginobjective(3, L_RIT_008, (DIFFBIT_PA | DIFFBIT_PD)) // "Secure Air Force One flight path"
		complete_flags(STAGEFLAG_PLANE_STABILIZED)
		fail_flags(STAGEFLAG_AUTOPILOT_DESTROYED)
	endobjective

	beginobjective(4, L_RIT_009, (DIFFBIT_A | DIFFBIT_SA | DIFFBIT_PA | DIFFBIT_PD)) // "Detach UFO from Air Force One"
		complete_flags(STAGEFLAG_UFO_ATTACHMENT_DAMAGED)
		fail_flags(STAGEFLAG_BOTH_MINES_WASTED)
		fail_flags(STAGEFLAG_PLANE_CRASHED)
	endobjective

	chr(SPAWNFLAG_ANTINONINTERACTABLE, 0x32, PAD_RIT_00BE, BODY_TRENT, HEAD_TRENT, GAILIST_IDLE, -1, -1, 200, 8, CHRFLAG0_00008000 | CHRFLAG0_AIVSAI | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_NONCOMBAT, SQUADRON_0F, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRDY357TRENT, 0x0032, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_DY357LX)
	chr(SPAWNFLAG_ANTINONINTERACTABLE, 0x33, PAD_RIT_00BC, BODY_MRBLONDE, HEAD_MRBLONDE, GAILIST_IDLE, -1, -1, 200, 100, CHRFLAG0_CANT_ALERT_GROUP | CHRFLAG0_CAN_RETREAT | CHRFLAG0_00008000 | CHRFLAG0_AIVSAI | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_NONCOMBAT, SQUADRON_0F, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0033, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(SPAWNFLAG_ANTINONINTERACTABLE, 0x34, PAD_RIT_00BD, BODY_MRBLONDE, HEAD_MRBLONDE, GAILIST_IDLE, -1, -1, 200, 100, CHRFLAG0_CANT_ALERT_GROUP | CHRFLAG0_CAN_RETREAT | CHRFLAG0_00008000 | CHRFLAG0_AIVSAI | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_NONCOMBAT, SQUADRON_0F, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0034, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
#if VERSION >= VERSION_NTSC_1_0
	chr(SPAWNFLAG_ANTINONINTERACTABLE, 0x01, PAD_RIT_008B, BODY_OVERALL, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x008b, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_02, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_ONLYONSA | SPAWNFLAG_ONLYONPA | SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT, 0x1b, PAD_RIT_008C, BODY_STEWARDESS, HEAD_RANDOM, AILIST_STEWARDESS, 0x00b2, -1, 2000, 5, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_HANDCOMBATONLY | CHRFLAG1_DOINGIDLEANIMATION, TEAM_ENEMY, SQUADRON_02, -1, 0, 0, 1, 0, 0)
	chr(SPAWNFLAG_ONLYONSA | SPAWNFLAG_ONLYONPA | SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT, 0x1c, PAD_RIT_00C1, BODY_STEWARD, HEAD_RANDOM, AILIST_STEWARD, 0x001f, -1, 2000, 5, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_HANDCOMBATONLY | CHRFLAG1_DOINGIDLEANIMATION, TEAM_ENEMY, SQUADRON_02, -1, 0, 0, 1, 0, 0)
#else
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x01, PAD_RIT_008B, BODY_OVERALL, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x008b, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_02, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_ONLYONSA | SPAWNFLAG_ONLYONPA | SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT, 0x1b, PAD_RIT_008C, BODY_STEWARDESS, HEAD_RANDOM, AILIST_STEWARDESS, -1, -1, 2000, 5, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_HANDCOMBATONLY | CHRFLAG1_DOINGIDLEANIMATION, TEAM_ENEMY, SQUADRON_02, -1, 0, 0, 1, 0, 0)
	chr(SPAWNFLAG_ONLYONSA | SPAWNFLAG_ONLYONPA | SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT, 0x1c, PAD_RIT_00C1, BODY_STEWARD, HEAD_RANDOM, AILIST_STEWARD, -1, -1, 2000, 5, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_HANDCOMBATONLY | CHRFLAG1_DOINGIDLEANIMATION, TEAM_ENEMY, SQUADRON_02, -1, 0, 0, 1, 0, 0)
#endif
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x04, PAD_RIT_008E, BODY_OVERALL, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x008e, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_HANDCOMBATONLY | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_03, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x05, PAD_RIT_008F, BODY_OVERALL, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x008f, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_HANDCOMBATONLY | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_03, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x06, PAD_RIT_0090, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x0090, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_04, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x07, PAD_RIT_0091, BODY_PRES_SECURITY, HEAD_RANDOM, 0x0426, 0x0091, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_04, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x08, PAD_RIT_0092, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x0092, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_05, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x09, PAD_RIT_0093, BODY_PRES_SECURITY, HEAD_RANDOM, GAILIST_IDLE, 0x0093, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_05, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x0a, PAD_RIT_0094, BODY_PRES_SECURITY, HEAD_RANDOM, GAILIST_IDLE, 0x0094, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_05, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x0b, PAD_RIT_0095, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x0002, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_06, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x0c, PAD_RIT_0096, BODY_PRES_SECURITY, HEAD_RANDOM, GAILIST_IDLE, 0x0002, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_06, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x0d, PAD_RIT_0097, BODY_PRES_SECURITY, HEAD_RANDOM, GAILIST_IDLE, 0x0097, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_06, -1, 0, 0, 0, 0, 0)
#if VERSION >= VERSION_NTSC_1_0
	chr(SPAWNFLAG_ANTINONINTERACTABLE, 0x0e, PAD_RIT_0098, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x0003, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_07, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_ANTINONINTERACTABLE, 0x0f, PAD_RIT_0099, BODY_PRES_SECURITY, HEAD_RANDOM, 0x0427, 0x0002, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_07, -1, 0, 0, 0, 0, 0)
#else
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x0e, PAD_RIT_0098, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x0003, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_07, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x0f, PAD_RIT_0099, BODY_PRES_SECURITY, HEAD_RANDOM, 0x0427, 0x0002, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_07, -1, 0, 0, 0, 0, 0)
#endif
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x10, PAD_RIT_009A, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x009a, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_07, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x11, PAD_RIT_009B, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x0004, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_08, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_BLUESIGHT, 0x18, PAD_RIT_00A0, BODY_PRESIDENT, HEAD_PRESIDENT, GAILIST_IDLE, 0x00a0, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, 0, TEAM_ENEMY, SQUADRON_08, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x12, PAD_RIT_009C, BODY_PRES_SECURITY, HEAD_RANDOM, 0x0428, 0x0003, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_08, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x13, PAD_RIT_009D, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x0002, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_09, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x14, PAD_RIT_009E, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x0020, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_09, -1, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_BASICGUARD | SPAWNFLAG_ANTINONINTERACTABLE, 0x15, PAD_RIT_009F, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_INIT_NEUTRAL, 0x00bb, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_CAN_DRAW_PISTOL, TEAM_ENEMY, SQUADRON_09, -1, 0, 0, 0, 0, 0)
#if VERSION >= VERSION_NTSC_1_0
	chr(SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT, 0x16, PAD_RIT_00CA, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_TYPING_GUY, 0x00b2, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, 0, TEAM_ENEMY, SQUADRON_0A, 0x11, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT, 0x17, PAD_RIT_00C9, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_SITTING_GUY, 0x001f, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, 0, TEAM_ENEMY, SQUADRON_0A, 0x10, 0, 0, 0, 0, 0)
#else
	chr(SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT, 0x16, PAD_RIT_00CA, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_TYPING_GUY, -1, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, 0, TEAM_ENEMY, SQUADRON_0A, 0x10, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT, 0x17, PAD_RIT_00C9, BODY_PRES_SECURITY, HEAD_RANDOM, AILIST_SITTING_GUY, -1, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, 0, TEAM_ENEMY, SQUADRON_0A, 0x11, 0, 0, 0, 0, 0)
#endif
	chr(SPAWNFLAG_FORCESUNGLASSES | SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT | SPAWNFLAG_BLUESIGHT, 0x19, PAD_RIT_00C7, BODY_PILOTAF1, HEAD_ROSS, AILIST_TYPING_GUY, -1, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, 0, TEAM_ENEMY, SQUADRON_0B, 0x12, 0, 0, 0, 0, 0)
	chr(SPAWNFLAG_FORCESUNGLASSES | SPAWNFLAG_ANTINONINTERACTABLE | SPAWNFLAG_FIXEDHEIGHT | SPAWNFLAG_BLUESIGHT, 0x1a, PAD_RIT_00C8, BODY_PILOTAF1, HEAD_WONG, AILIST_SITTING_GUY, -1, -1, 1000, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_HEAR_REQUIRE_LOS, 0, TEAM_ENEMY, SQUADRON_0B, 0x13, 0, 0, 0, 0, 0)
	chr(0, 0x1d, PAD_RIT_00A5, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_01, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x001d, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x1e, PAD_RIT_00A6, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_02, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x001e, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x1f, PAD_RIT_00A7, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_03, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x001f, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x20, PAD_RIT_00A8, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_04, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0020, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x21, PAD_RIT_00A9, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_04, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0021, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x22, PAD_RIT_00AA, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_04, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0022, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x24, PAD_RIT_00AC, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_06, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0024, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x25, PAD_RIT_00AD, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_06, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0025, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x26, PAD_RIT_0006, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_07, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0026, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x27, PAD_RIT_0089, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_08, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0027, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x28, PAD_RIT_000D, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_08, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0028, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x29, PAD_RIT_00AE, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_CANT_ALERT_GROUP | CHRFLAG0_CAN_RETREAT | CHRFLAG0_00008000 | CHRFLAG0_AIVSAI | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_0F, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0029, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(SPAWNFLAG_IGNORECOLLISION, 0x2a, PAD_RIT_00AF, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_05, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x002a, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(SPAWNFLAG_IGNORECOLLISION, 0x2b, PAD_RIT_00B0, BODY_STRIPES, HEAD_RANDOM, AILIST_INIT_STRIPES, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_HEAR_REQUIRE_LOS | CHRFLAG0_CANLOSEGUN, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_05, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x002b, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x30, PAD_RIT_006A, BODY_STRIPES, HEAD_RANDOM, GAILIST_IDLE, -1, -1, 200, 100, CHRFLAG0_CANT_ALERT_GROUP | CHRFLAG0_CAN_RETREAT | CHRFLAG0_00008000 | CHRFLAG0_AIVSAI | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_0F, -1, 0, 0, 0, 0, 0)
	weapon(0x0100, MODEL_CHRAVENGER, 0x0030, OBJFLAG_ASSIGNEDTOCHR, 0, 0, WEAPON_K7AVENGER)
	chr(0, 0x31, PAD_RIT_0069, BODY_TRENT, HEAD_TRENT, GAILIST_IDLE, -1, -1, 200, 100, CHRFLAG0_CANT_ALERT_GROUP | CHRFLAG0_CAN_RETREAT | CHRFLAG0_00008000 | CHRFLAG0_AIVSAI | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_0F, -1, 0, 0, 0, 0, 0)
	chr(0, 0x00, PAD_RIT_008A, BODY_THEKING, HEAD_ELVIS, AILIST_INIT_ELVIS, -1, -1, 200, 100, CHRFLAG0_CANT_ALERT_GROUP | CHRFLAG0_CAN_RETREAT | CHRFLAG0_00008000 | CHRFLAG0_AIVSAI | CHRFLAG0_HEAR_REQUIRE_LOS, CHRFLAG1_PREWARNED | CHRFLAG1_PUNCHAIEXTRADAMAGE | CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_AIVSAI_ADVANTAGED, TEAM_ENEMY, SQUADRON_0F, -1, 0, 0, 0, 0, 0)
	chr(0, 0x35, PAD_RIT_0088, BODY_STRIPES, HEAD_RANDOM, AILIST_CLONER1, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_NOIDLEANIMS | CHRFLAG1_AIVSAI_ADVANTAGED | CHRFLAG1_NOOP_00200000, TEAM_ENEMY, SQUADRON_00, -1, 0, 0, 0, 0, 0)
	chr(0, 0x36, PAD_RIT_00B5, BODY_STRIPES, HEAD_RANDOM, AILIST_CLONER2, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_NOIDLEANIMS | CHRFLAG1_AIVSAI_ADVANTAGED | CHRFLAG1_NOOP_00200000, TEAM_ENEMY, SQUADRON_00, -1, 0, 0, 0, 0, 0)
	chr(0, 0x37, PAD_RIT_00B6, BODY_STRIPES, HEAD_RANDOM, AILIST_CLONER3, -1, -1, 200, 100, CHRFLAG0_SKIPSAFETYCHECKS | CHRFLAG0_AIVSAI | CHRFLAG0_SQUADALERTANYDIST | CHRFLAG0_CANLOSEGUN, CHRFLAG1_NOHANDCOMBAT | CHRFLAG1_NOIDLEANIMS | CHRFLAG1_AIVSAI_ADVANTAGED | CHRFLAG1_NOOP_00200000, TEAM_ENEMY, SQUADRON_00, -1, 0, 0, 0, 0, 0)
	tag(0x1b, 1)
	lift(0x0100, MODEL_A51_LIFT_THINWALL, PAD_RIT_010B, OBJFLAG_00000008 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_FORCENOBOUNCE | OBJFLAG_01000000 | OBJFLAG_CANNOT_ACTIVATE | OBJFLAG_LIFT_CHECKCEILING, OBJFLAG2_NOFALL | OBJFLAG2_FALLWITHOUTROTATION | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_BULLETPROOF | OBJFLAG2_IMMUNETOEXPLOSIONS, 0, 1000, 0x010b, 0x010a, -1, -1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000071c, 0x0010aaaa, 0x15000000)
	tag(0x1f, 1)
	lift(0x0100, MODEL_A51_LIFT_THINWALL, PAD_RIT_0110, OBJFLAG_00000008 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_FORCENOBOUNCE | OBJFLAG_01000000 | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_NOFALL | OBJFLAG2_FALLWITHOUTROTATION | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_BULLETPROOF | OBJFLAG2_IMMUNETOEXPLOSIONS, 0, 1000, 0x0110, 0x0111, -1, -1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000071c, 0x0010aaaa, 0x15000000)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00D2, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00D3, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00D4, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00D5, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00D6, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00D7, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00D8, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00D9, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00DA, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00DB, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00DC, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_AF1_DOORBIG2, PAD_RIT_00DD, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000001, 0x00000800)
	door(0x0100, MODEL_AF1_DOORBIG2, PAD_RIT_00DE, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0xffffffff, 0x00000000)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00DF, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E0, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E1, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E2, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_AF1_DOORBIG2, PAD_RIT_0100, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000004, 0x0000012c, 0x00000000, 0x00000001, 0x00000800)
	door(0x0100, MODEL_AF1_DOORBIG2, PAD_RIT_0101, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000004, 0x0000012c, 0x00000000, 0xffffffff, 0x00000000)
	door(0x0100, MODEL_AF1_DOORBIG2, PAD_RIT_0102, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000020, 0x0000012c, 0x00000000, 0x00000001, 0x00000800)
	door(0x0100, MODEL_AF1_DOORBIG2, PAD_RIT_0103, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000020, 0x0000012c, 0x00000000, 0xffffffff, 0x00000000)
	key(0x0080, MODEL_KEYCARD, 0x000e, OBJFLAG_ASSIGNEDTOCHR, 0, 0, 4)
	rename_object(-1, WEAPON_KEYCARD49, L_RIT_055, L_RIT_056, L_RIT_057, L_RIT_058, L_RIT_059) // ""
	key(0x0080, MODEL_KEYCARD, 0x000f, OBJFLAG_ASSIGNEDTOCHR, 0, 0, 32)
	rename_object(-1, WEAPON_KEYCARD49, L_RIT_055, L_RIT_056, L_RIT_057, L_RIT_058, L_RIT_059) // ""
	tag(0x22, 1)
	key(0x0080, MODEL_KEYCARD, 0x0001, OBJFLAG_ASSIGNEDTOCHR, 0, 0, 0)
	rename_object(-1, WEAPON_KEYCARD49, L_RIT_055, L_RIT_056, L_RIT_057, L_RIT_058, L_RIT_059) // ""
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00F5, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00F6, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00F7, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00F8, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00F9, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00FA, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00FB, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00FC, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00FD, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	tag(0x0c, 1)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E3, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E4, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	tag(0x0e, 1)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E5, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000040, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E6, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E7, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E8, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00E9, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	tag(0x15, 1)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00EA, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00EB, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00EC, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00ED, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00EE, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00EF, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00FE, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	tag(0x25, 1)
	door(0x0100, MODEL_AF1ESCAPEDOOR, PAD_RIT_0105, OBJFLAG_00000010 | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_CANNOT_ACTIVATE | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, 0, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	tag(0x26, 1)
	door(0x0100, MODEL_AF1ESCAPEDOOR, PAD_RIT_0106, OBJFLAG_00000010 | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_CANNOT_ACTIVATE | OBJFLAG_DEACTIVATED, OBJFLAG2_INVISIBLE, 0, 1000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, DOORTYPE_SLIDING, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800)
	tag(0x20, 1)
	door(0x0100, MODEL_DD_GRATE, PAD_RIT_00F1, OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000f333, 0x00010000, 0x0000ffff, 0x00014000, 0x00000ccc, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000008, 0x00000384, 0x00000000, 0x00000000, 0x00000300)
	tag(0x0b, 1)
	door(0x0100, MODEL_DD_GRATE, PAD_RIT_00F2, OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_DOOR_ALTCOORDSYSTEM, 0, 1000, 0x0000f333, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004 | DOORFLAG_UNBLOCKABLEOPEN, DOORTYPE_SLIDING, 0x00000000, 0x00000384, 0x00000000, 0x00000000, 0x00000300)
	tag(0x2e, 1)
	stdobject(0x0100, MODEL_DD_GRATE, PAD_RIT_0108, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_INVINCIBLE, OBJFLAG2_INVISIBLE, 0, 1000)
	door(0x0100, MODEL_DD_GRATE, PAD_RIT_0109, OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000f333, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000008, 0x00000384, 0x00000000, 0x00000000, 0x00000300)
	stdobject(0x00e6, MODEL_A51_CRATE2, PAD_RIT_011B, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	stdobject(0x00a6, MODEL_A51_CRATE2, PAD_RIT_011C, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	stdobject(0x0100, MODEL_A51_CRATE2, PAD_RIT_011E, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_INVINCIBLE, OBJFLAG2_NOFALL | OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	tag(0x01, 1)
	weapon(0x0180, MODEL_CHRDATATHIEF, PAD_RIT_003F, OBJFLAG_FALL, 0, 0, WEAPON_LAPTOPGUN)
	tag(0x16, 1)
	weapon(0x0180, MODEL_CHRDATATHIEF, -1, OBJFLAG_FALL, 0, 0, WEAPON_LAPTOPGUN)
	tag(0x04, 1)
	weapon(0x0180, MODEL_CHRREMOTEMINE, PAD_RIT_003F, OBJFLAG_FALL, 0, 0, WEAPON_TIMEDMINE)
	tag(0x17, 1)
	weapon(0x0180, MODEL_CHRREMOTEMINE, -1, OBJFLAG_FALL, 0, 0, WEAPON_TIMEDMINE)
	tag(0x02, 1)
	multimonitor(0x0099, MODEL_COMHUB, PAD_RIT_0116, OBJFLAG_00000002 | OBJFLAG_00000008 | OBJFLAG_INVINCIBLE | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_REMOVEWHENDESTROYED, 0, 1000, 3, 3, 3, 0)
	tag(0x27, 1)
	multimonitor(0x0099, MODEL_COMHUB, PAD_RIT_0117, OBJFLAG_00000002 | OBJFLAG_00000008 | OBJFLAG_INVINCIBLE | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_REMOVEWHENDESTROYED, 0, 1000, 3, 3, 3, 0)
	tag(0x28, 1)
	multimonitor(0x0099, MODEL_COMHUB, PAD_RIT_0118, OBJFLAG_00000002 | OBJFLAG_00000008 | OBJFLAG_INVINCIBLE | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_REMOVEWHENDESTROYED, 0, 1000, 3, 3, 3, 0)
	tag(0x29, 1)
	multimonitor(0x0099, MODEL_COMHUB, PAD_RIT_0119, OBJFLAG_00000002 | OBJFLAG_00000008 | OBJFLAG_INVINCIBLE | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_REMOVEWHENDESTROYED, 0, 1000, 3, 3, 3, 0)
	tag(0x2a, 1)
	multimonitor(0x0099, MODEL_COMHUB, PAD_RIT_011A, OBJFLAG_00000002 | OBJFLAG_00000008 | OBJFLAG_INVINCIBLE | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_REMOVEWHENDESTROYED, 0, 1000, 3, 3, 3, 0)
	tag(0x03, 1)
	singlemonitor(0x0100, MODEL_MODEMBOX, PAD_RIT_0112, OBJFLAG_00000002 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_DEACTIVATED, OBJFLAG2_IMMUNETOANTI, OBJFLAG3_INTERACTABLE, 1000, 18)
	tag(0x0f, 3)
	tag(0x05, 1)
	lift(0x0100, MODEL_A51_LIFT_THINWALL, PAD_RIT_010C, OBJFLAG_00000008 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_FORCENOBOUNCE | OBJFLAG_01000000 | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_NOFALL | OBJFLAG2_FALLWITHOUTROTATION | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_BULLETPROOF | OBJFLAG2_IMMUNETOEXPLOSIONS, 0, 1000, 0x010c, 0x010d, -1, -1, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x0000071c, 0x0010aaaa, 0x1b000000)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00FF, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_CANNOT_ACTIVATE | OBJFLAG_DEACTIVATED, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	lift_door(-1, -2, 0)
#if VERSION >= VERSION_PAL_FINAL
	tag(0x2b, 1)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00F4, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004 | DOORFLAG_UNBLOCKABLEOPEN, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
#elif VERSION >= VERSION_NTSC_1_0
	tag(0x2b, 1)
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00F4, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
#endif
	door(0x0100, MODEL_DD_DR_NONREF, PAD_RIT_00F3, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, 0, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000002, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	tag(0x06, 1)
	lift(0x0100, MODEL_A51_LIFT_THINWALL, PAD_RIT_010F, OBJFLAG_00000008 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_FORCENOBOUNCE | OBJFLAG_01000000 | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_NOFALL | OBJFLAG2_FALLWITHOUTROTATION | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_BULLETPROOF | OBJFLAG2_IMMUNETOEXPLOSIONS, 0, 1000, 0x010f, 0x010e, -1, -1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000071c, 0x0010aaaa, 0x1b000000)
	tag(0x07, 1)
	multimonitor(0x0099, MODEL_COMHUB, PAD_RIT_0113, OBJFLAG_00000002, 0, OBJFLAG3_INTERACTABLE, 1000, 3, 3, 3, 0)
	tag(0x08, 1)
	multimonitor(0x0099, MODEL_COMHUB, PAD_RIT_0114, OBJFLAG_00000002, 0, OBJFLAG3_INTERACTABLE, 1000, 3, 3, 3, 0)
	tag(0x12, 1)
	stdobject(0x0100, MODEL_AF1_PILOTCHAIR, PAD_RIT_013A, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PILOTCHAIR, PAD_RIT_013B, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	tag(0x13, 1)
	stdobject(0x0100, MODEL_AF1_PILOTCHAIR, PAD_RIT_013C, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	tag(0x10, 1)
	stdobject(0x0100, MODEL_AF1_PILOTCHAIR, PAD_RIT_013D, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	tag(0x11, 1)
	stdobject(0x0100, MODEL_AF1_PILOTCHAIR, PAD_RIT_013E, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_011F, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0120, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0121, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0122, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0123, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0124, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0125, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0126, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0127, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0128, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0129, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_012A, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_012B, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_012D, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_012E, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_012F, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0130, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0131, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0132, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0133, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0134, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0135, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0136, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0137, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0138, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_0139, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_016A, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_DD_DESK, PAD_RIT_0160, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_DD_DESK, PAD_RIT_0161, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_DD_DESK, PAD_RIT_0162, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_DD_DESK, PAD_RIT_0163, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_DD_DESK, PAD_RIT_0164, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_DD_DESK, PAD_RIT_0165, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_DD_DESK, PAD_RIT_0166, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_013F, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0140, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0141, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0142, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0143, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0144, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0145, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0146, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0147, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0148, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0149, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_014A, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_014B, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_014C, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_014D, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_014E, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_014F, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0150, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0151, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0152, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TABLE, PAD_RIT_0169, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TOILET, PAD_RIT_0153, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_TOILET, PAD_RIT_0154, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_LAMP, PAD_RIT_0156, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_LAMP, PAD_RIT_0157, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_LAMP, PAD_RIT_0158, OBJFLAG_00000008 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_LAMP, PAD_RIT_0159, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_LAMP, PAD_RIT_015A, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_LAMP, PAD_RIT_015B, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, 0, 0, 1000)
	stdobject(0x0100, MODEL_AF1_PASSCHAIR, PAD_RIT_015E, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100 | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_NOFALL | OBJFLAG2_IMMUNETOGUNFIRE, 0, 1000)
	tag(0x19, 1)
	stdobject(0x0100, MODEL_SK_SHUTTLE, -1, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_IGNOREROOMCOLOUR, 0, 0, 1000)
	tag(0x37, 1)
	stdobject(0x0100, MODEL_AIRFORCE1, -1, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_IGNOREROOMCOLOUR, 0, 0, 1000)
	tag(0x1a, 1)
	stdobject(0x0100, MODEL_ELVIS_SAUCER, -1, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_IGNOREROOMCOLOUR, 0, 0, 1000)
	tag(0x23, 1)
	stdobject(0x0019, MODEL_SAUCERINSIDE, -1, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_IGNOREROOMCOLOUR | OBJFLAG_INVINCIBLE, 0, 0, 1000)
	stdobject(0x0100, MODEL_HOVBIKE, PAD_RIT_00C0, OBJFLAG_FALL | OBJFLAG_00000100 | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_01000000 | OBJFLAG_AISEETHROUGH, OBJFLAG2_NOFALL | OBJFLAG2_FALLWITHOUTROTATION | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_BULLETPROOF | OBJFLAG2_IMMUNETOEXPLOSIONS, 0, 1000)
	door(0x0100, MODEL_DOOR2A_G5, PAD_RIT_0104, OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_DEACTIVATED, OBJFLAG2_BULLETPROOF, 0, 1000, 0x0000e666, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000000, 0x0000012c, 0x00000000, 0x00000000, 0x00000800)
	tag(0x1c, 1)
	door(0x0100, MODEL_DD_GRATE, PAD_RIT_00F0, OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_AICANNOTUSE, 0, 1000, 0x00010000, 0x00010000, 0x00007fff, 0x00014000, 0x00000666, DOORFLAG_0004, DOORTYPE_SLIDING, 0x00000010, 0x00000384, 0x00000000, 0x00000000, 0x00000000)
	tag(0x1e, 1)
	singlemonitor(0x0100, MODEL_GOODSTATION, PAD_RIT_0168, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOANTI, OBJFLAG3_INTERACTABLE, 1000, 3)
	tag(0x21, 1)
	singlemonitor(0x0100, MODEL_GOODSTATION, PAD_RIT_0167, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_IGNOREFLOORCOLOUR, OBJFLAG2_IMMUNETOANTI, OBJFLAG3_INTERACTABLE, 1000, 3)
	tag(0x00, 1)
	weapon(0x0180, MODEL_CHRBRIEFCASE, PAD_RIT_00B3, OBJFLAG_FALL | OBJFLAG_00000100, 0, OBJFLAG3_PLAYERUNDROPPABLE, WEAPON_SUITCASE)
	rename_object(-1, WEAPON_SUITCASE, L_RIT_010, L_RIT_011, L_RIT_012, L_RIT_013, L_RIT_014) // "Obtain Suitcase."
	tag(0x3a, 1)
	weapon(0x0180, MODEL_CHRBRIEFCASE, -1, OBJFLAG_FALL | OBJFLAG_00000100, 0, OBJFLAG3_PLAYERUNDROPPABLE, WEAPON_SUITCASE)
	rename_object(-1, WEAPON_SUITCASE, L_RIT_010, L_RIT_011, L_RIT_012, L_RIT_013, L_RIT_014) // "Obtain Suitcase."
	tag(0x24, 1)
	stdobject(0x0100, MODEL_PRESCAPSULE, PAD_RIT_0171, OBJFLAG_FALL | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ZTOPADBOUNDS | OBJFLAG_00000100, OBJFLAG2_IMMUNETOANTI | OBJFLAG2_NOFALL | OBJFLAG2_IMMUNETOGUNFIRE, 0, 32000)
	glass(0x0100, MODEL_WINDOW, PAD_RIT_016D, OBJFLAG_00000002 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ORTHOGONAL | OBJFLAG_AISEETHROUGH, OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_BULLETPROOF | OBJFLAG2_IMMUNETOEXPLOSIONS, 0, 1000)
	glass(0x0100, MODEL_WINDOW, PAD_RIT_016E, OBJFLAG_00000002 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ORTHOGONAL | OBJFLAG_AISEETHROUGH, OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_BULLETPROOF | OBJFLAG2_IMMUNETOEXPLOSIONS, 0, 1000)
	glass(0x0100, MODEL_WINDOW, PAD_RIT_016F, OBJFLAG_00000002 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ORTHOGONAL | OBJFLAG_AISEETHROUGH, OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_BULLETPROOF | OBJFLAG2_IMMUNETOEXPLOSIONS, 0, 1000)
	glass(0x0100, MODEL_WINDOW, PAD_RIT_0170, OBJFLAG_00000002 | OBJFLAG_XTOPADBOUNDS | OBJFLAG_YTOPADBOUNDS | OBJFLAG_ORTHOGONAL | OBJFLAG_AISEETHROUGH, OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_BULLETPROOF | OBJFLAG2_IMMUNETOEXPLOSIONS, 0, 1000)
	tag(0x2f, 5)
	tag(0x30, 6)
	tag(0x31, 7)
	tag(0x32, 8)
	conditional_scenery(1, 0, 0)
	debris(0x0019, MODEL_AF1RUBBLE, PAD_RIT_00CE, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_FORCENOBOUNCE | OBJFLAG_01000000 | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_NOFALL | OBJFLAG2_FALLWITHOUTROTATION | OBJFLAG2_REMOVEWHENDESTROYED | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_INVISIBLE | OBJFLAG2_BULLETPROOF, 0, 1)
	conditional_scenery(1, 0, 0)
	debris(0x0019, MODEL_AF1RUBBLE, PAD_RIT_00CF, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_FORCENOBOUNCE | OBJFLAG_01000000 | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_NOFALL | OBJFLAG2_FALLWITHOUTROTATION | OBJFLAG2_REMOVEWHENDESTROYED | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_INVISIBLE | OBJFLAG2_BULLETPROOF, 0, 1)
	conditional_scenery(1, 0, 0)
	debris(0x0019, MODEL_AF1RUBBLE, PAD_RIT_00D0, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_FORCENOBOUNCE | OBJFLAG_01000000 | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_NOFALL | OBJFLAG2_FALLWITHOUTROTATION | OBJFLAG2_REMOVEWHENDESTROYED | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_INVISIBLE | OBJFLAG2_BULLETPROOF, 0, 1)
	conditional_scenery(1, 0, 0)
	debris(0x0019, MODEL_AF1RUBBLE, PAD_RIT_00D1, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_FORCENOBOUNCE | OBJFLAG_01000000 | OBJFLAG_CANNOT_ACTIVATE, OBJFLAG2_NOFALL | OBJFLAG2_FALLWITHOUTROTATION | OBJFLAG2_REMOVEWHENDESTROYED | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_INVISIBLE | OBJFLAG2_BULLETPROOF, 0, 1)
	tag(0x33, 4)
	tag(0x34, 4)
	tag(0x35, 4)
	tag(0x36, 4)
	weapon(0x0100, MODEL_CHRREMOTEMINE, PAD_RIT_00CE, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_BOUNCEIFSHOT | OBJFLAG_01000000, OBJFLAG2_REMOVEWHENDESTROYED | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_DONTPAUSE | OBJFLAG2_INVISIBLE, 0, WEAPON_REMOTEMINE)
	weapon(0x0100, MODEL_CHRREMOTEMINE, PAD_RIT_00CF, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_BOUNCEIFSHOT | OBJFLAG_01000000, OBJFLAG2_REMOVEWHENDESTROYED | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_DONTPAUSE | OBJFLAG2_INVISIBLE, 0, WEAPON_REMOTEMINE)
	weapon(0x0100, MODEL_CHRREMOTEMINE, PAD_RIT_00D0, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_BOUNCEIFSHOT | OBJFLAG_01000000, OBJFLAG2_REMOVEWHENDESTROYED | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_DONTPAUSE | OBJFLAG2_INVISIBLE, 0, WEAPON_REMOTEMINE)
	weapon(0x0100, MODEL_CHRREMOTEMINE, PAD_RIT_00D1, OBJFLAG_FALL | OBJFLAG_IGNOREFLOORCOLOUR | OBJFLAG_INVINCIBLE | OBJFLAG_UNCOLLECTABLE | OBJFLAG_BOUNCEIFSHOT | OBJFLAG_01000000, OBJFLAG2_REMOVEWHENDESTROYED | OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_DONTPAUSE | OBJFLAG2_INVISIBLE, 0, WEAPON_REMOTEMINE)
	tag(0x2c, 1)
	shield(0x0100, MODEL_CHRSHIELD, PAD_RIT_016C, OBJFLAG_FALL | OBJFLAG_00000100 | OBJFLAG_INVINCIBLE | OBJFLAG_FORCENOBOUNCE, OBJFLAG2_EXCLUDE_SA | OBJFLAG2_EXCLUDE_PA | OBJFLAG2_EXCLUDE_PD, 0, 1000)
	tag(0x2d, 1)
	shield(0x0100, MODEL_CHRSHIELD, PAD_RIT_016B, OBJFLAG_FALL | OBJFLAG_00000100 | OBJFLAG_INVINCIBLE | OBJFLAG_FORCENOBOUNCE, OBJFLAG2_EXCLUDE_PA | OBJFLAG2_EXCLUDE_PD, 0, 1000)
	tag(0x38, 2)
	tag(0x39, 2)
	weapon(0x0180, MODEL_CHRCYCLONE, PAD_RIT_00CB, OBJFLAG_FALL, 0, 0, WEAPON_CYCLONE)
	weapon(0x0180, MODEL_CHRCYCLONE, PAD_RIT_00CC, OBJFLAG_FALL, 0, 0, WEAPON_CYCLONE)
	link_guns(-1, -2)
	endprops
};

s32 intro[] = {
	outfit(OUTFIT_STEWARDESS)
	ammo(AMMOTYPE_CROSSBOW, 10)
	ammo(AMMOTYPE_SMG, 100)
	intro_weapon(WEAPON_UNARMED, -1)
	intro_weapon(WEAPON_COMBATBOOST, -1)
	ammo(AMMOTYPE_BOOST, 2)
	spawn(PAD_RIT_008A)
	endintro
};

s32 path00[] = {
	PAD_RIT_0034,
	PAD_RIT_0033,
	PAD_RIT_0031,
	PAD_RIT_0030,
	PAD_RIT_0031,
	PAD_RIT_0033,
	PAD_RIT_0034,
	-1,
};

s32 path01[] = {
	PAD_RIT_000D,
	PAD_RIT_000E,
	PAD_RIT_000B,
	PAD_RIT_0012,
	PAD_RIT_0007,
	PAD_RIT_0006,
	PAD_RIT_0010,
	PAD_RIT_000C,
	-1,
};

s32 path02[] = {
	PAD_RIT_003E,
	PAD_RIT_0044,
	PAD_RIT_0042,
	PAD_RIT_0040,
	PAD_RIT_003F,
	PAD_RIT_003D,
	PAD_RIT_003E,
	PAD_RIT_004D,
	-1,
};

u8 func1001_objectives_failed_msg[] = {
	yield
	set_chr_chrflag(CHR_PRESIDENT, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(CHR_STEWARDESS, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(CHR_STEWARD, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(CHR_PILOT1, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(CHR_PILOT2, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x01, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x02, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x03, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x04, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x05, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x06, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x07, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x08, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x09, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x0a, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x0b, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x0c, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x0d, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x0e, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x0f, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x10, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x11, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x12, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x13, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x14, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x15, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x16, CHRCFLAG_KEEPCORPSEKO)
	set_chr_chrflag(0x17, CHRCFLAG_KEEPCORPSEKO)
	set_ailist(CHR_SELF, GAILIST_SHOW_OBJ_FAILED_MSG)
	endlist
};

u8 func1400_setup_counterop[] = {
	yield
	yield
	yield
	set_chr_team(CHR_ANTI, TEAM_04)
	chr_draw_weapon(CHR_BOND, WEAPON_UNARMED)
	chr_draw_weapon(CHR_COOP, WEAPON_UNARMED)
	set_ailist(CHR_SELF, GAILIST_REBUILD_GROUPS)
	endlist
};

u8 func1003_rebuild_groups[] = {
	set_ailist(CHR_SELF, GAILIST_REBUILD_GROUPS)
	endlist
};

u8 func1024_give_objects[] = {
	if_difficulty_gt(DIFF_A, /*goto*/ 0x2d)
	give_object_to_chr(OBJ_EQUIPMENT, CHR_BOND)
	give_object_to_chr(OBJ_EQUIPMENT_COOP, CHR_COOP)

	label(0x2d)
	set_object_flag2(OBJ_DATAUPLINK_BOND, OBJFLAG2_INVISIBLE)
	set_object_flag(OBJ_DATAUPLINK_BOND, OBJFLAG_UNCOLLECTABLE)
	set_object_flag2(OBJ_REMOTEMINE_BOND, OBJFLAG2_INVISIBLE)
	set_object_flag(OBJ_REMOTEMINE_BOND, OBJFLAG_UNCOLLECTABLE)
	set_object_flag2(OBJ_DATAUPLINK_COOP, OBJFLAG2_INVISIBLE)
	set_object_flag(OBJ_DATAUPLINK_COOP, OBJFLAG_UNCOLLECTABLE)
	set_object_flag2(OBJ_REMOTEMINE_COOP, OBJFLAG2_INVISIBLE)
	set_object_flag(OBJ_REMOTEMINE_COOP, OBJFLAG_UNCOLLECTABLE)

	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		if_chr_has_object(CHR_P1P2, OBJ_EQUIPMENT, /*goto*/ 0x06)
	endloop(0x04)

	label(0x06)
	give_object_to_chr(OBJ_DATAUPLINK_BOND, CHR_BOND)
	give_object_to_chr(OBJ_REMOTEMINE_BOND, CHR_BOND)
	if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
	give_object_to_chr(OBJ_DATAUPLINK_COOP, CHR_COOP)
	give_object_to_chr(OBJ_REMOTEMINE_COOP, CHR_COOP)
	label(0x2d)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1004_reassign_ailists_during_conversation[] = {
	// Wait until player in president's room
	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0055, /*goto*/ 0x06)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0056, /*goto*/ 0x06)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0057, /*goto*/ 0x06)
	endloop(0x04)

	label(0x06)
	dprint 'b','4',' ','s','h','i','e','l','d',' ','c','h','e','c','k','\n',0,
	set_stage_flag(STAGEFLAG_00100000)
	set_chr_target_chr(CHR_PRESIDENT, CHR_P1P2)
	set_ailist(0x01, AILIST_BE_UNALERT)
	set_ailist(CHR_STEWARDESS, AILIST_BE_UNALERT)
	set_ailist(CHR_STEWARD, AILIST_BE_UNALERT)
	set_ailist(0x04, AILIST_BE_UNALERT)
	set_ailist(0x05, AILIST_BE_UNALERT)
	set_ailist(0x06, AILIST_BE_UNALERT)
	set_ailist(0x07, AILIST_BE_UNALERT)
	set_ailist(0x08, AILIST_BE_UNALERT)
	set_ailist(0x09, AILIST_BE_UNALERT)
	set_ailist(0x0a, AILIST_BE_UNALERT)
	set_ailist(0x0b, AILIST_BE_UNALERT)
	set_ailist(0x0c, AILIST_BE_UNALERT)
	set_ailist(0x0d, AILIST_BE_UNALERT)
	set_ailist(0x0e, AILIST_BE_UNALERT)
	set_ailist(0x0f, AILIST_BE_UNALERT)
	set_ailist(0x10, AILIST_BE_UNALERT)
	set_ailist(0x11, AILIST_BE_UNALERT)
	set_ailist(0x12, AILIST_BE_UNALERT)
	set_ailist(0x13, AILIST_BE_UNALERT)
	set_ailist(0x14, AILIST_BE_UNALERT)
	set_ailist(0x15, AILIST_BE_UNALERT)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1005_check_neutrals_killed[] = {
	set_chr_chrflag(0x01, CHRCFLAG_KILLCOUNTABLE)
#if VERSION >= VERSION_JPN_FINAL
	set_chr_chrflag(CHR_STEWARDESS, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(CHR_STEWARD, CHRCFLAG_KILLCOUNTABLE)
#endif
	set_chr_chrflag(0x04, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x05, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x06, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x07, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x08, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x09, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x0a, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x0b, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x0c, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x0d, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x0e, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x0f, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x10, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x11, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x12, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x13, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x14, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x15, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x16, CHRCFLAG_KILLCOUNTABLE)
	set_chr_chrflag(0x17, CHRCFLAG_KILLCOUNTABLE)

	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_PRESIDENT_STARTED_RUNNING, TRUE, /*goto*/ 0x06)
		if_kill_count_gt(0, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	show_hudmsg(CHR_BOND, L_RIT_020) // "Too many neutral casualties inflicted."
	set_stage_flag(STAGEFLAG_KILLED_NEUTRALS)

	label(0x06)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func0401_init_stripes[] = {
	set_chr_chrflag(CHR_SELF, CHRCFLAG_HIDDEN)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func0402_init_elvis[] = {
	set_chr_chrflag(CHR_SELF, CHRCFLAG_HIDDEN)
	set_self_chrflag(CHRCFLAG_INVINCIBLE)
	set_self_chrflag(CHRCFLAG_UNEXPLODABLE)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1006_hijack[] = {
	yield
	disable_chr(0x1d)
	disable_chr(0x1e)
	disable_chr(0x1f)
	disable_chr(0x20)
	disable_chr(0x21)
	disable_chr(0x22)
	disable_chr(0x23)
	disable_chr(0x24)
	disable_chr(0x25)
	disable_chr(0x26)
	disable_chr(0x27)
	disable_chr(0x28)
	disable_chr(0x29)
	disable_chr(CHR_TAKER1)
	disable_chr(CHR_TAKER2)

	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_PRESIDENT_STARTED_RUNNING, TRUE, /*goto*/ 0x06)
	endloop(0x04)

	label(0x06)
	play_music_continuously(MUSIC_AIRFORCEONE_X)
	set_chr_maxdamage(0x01, 10)
	set_chr_maxdamage(0x04, 10)
	set_chr_maxdamage(0x05, 10)
	set_chr_maxdamage(0x06, 10)
	set_chr_maxdamage(0x07, 10)
	set_chr_maxdamage(0x08, 10)
	set_chr_maxdamage(0x09, 10)
	set_chr_maxdamage(0x0a, 10)
	set_chr_maxdamage(0x0b, 10)
	set_chr_maxdamage(0x0c, 10)
	set_chr_maxdamage(0x0d, 10)
	set_chr_maxdamage(0x0e, 10)
	set_chr_maxdamage(0x0f, 10)
	set_chr_maxdamage(0x10, 10)
	set_chr_maxdamage(0x16, 10)
	set_chr_maxdamage(0x17, 10)
	set_chr_maxdamage(CHR_PILOT1, 10)
	set_chr_maxdamage(CHR_PILOT2, 10)
	set_ailist(0x01, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(CHR_STEWARDESS, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(CHR_STEWARD, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x04, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x05, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x06, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x07, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x08, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x09, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x0a, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x0b, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x0c, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x0d, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x10, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x12, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x13, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x15, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x16, AILIST_REMOVE_IF_OFFSCREEN)
	yield
	set_ailist(0x17, AILIST_REMOVE_IF_OFFSCREEN)
	set_ailist(0x0e, AILIST_INIT_DEFEND_PAD)
	set_ailist(0x0f, AILIST_INIT_DEFEND_PAD)
	set_ailist(0x11, AILIST_INIT_DEFEND_PAD)
	set_ailist(0x14, AILIST_INIT_DEFEND_PAD)
	yield

	#define enable_stripes_chr(chr, function) \
		enable_chr(chr) \
		set_ailist(chr, function) \
		unset_chr_chrflag(chr, CHRCFLAG_HIDDEN) \
		set_chr_hiddenflag(chr, CHRHFLAG_BASICGUARD) \
		yield

	enable_stripes_chr(0x1d, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x1e, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x1f, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x20, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x21, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x22, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x23, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x24, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x25, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x26, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x27, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x28, AILIST_REINIT_STRIPES)
	enable_stripes_chr(0x29, AILIST_COCKPIT_STRIPES)
	enable_stripes_chr(CHR_TAKER1, AILIST_TAKER2)
	enable_stripes_chr(CHR_TAKER2, AILIST_TAKER1)

	set_chr_flag_bankx(0x01, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(CHR_STEWARDESS, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(CHR_STEWARD, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x04, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x05, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x06, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x07, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x08, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x09, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x0a, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x0b, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x0c, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x0d, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x0e, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x0f, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x10, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x11, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x12, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x13, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x14, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_flag_bankx(0x15, CHRFLAG0_AIVSAI, BANK_0)
	set_chr_team(CHR_TRENT, TEAM_04)
	set_chr_team(CHR_BLONDE1, TEAM_04)
	set_chr_team(CHR_BLONDE2, TEAM_04)
	unset_chr_hiddenflag(CHR_TRENT, CHRHFLAG_ANTINONINTERACTABLE)
	unset_chr_hiddenflag(CHR_BLONDE1, CHRHFLAG_ANTINONINTERACTABLE)
	unset_chr_hiddenflag(CHR_BLONDE2, CHRHFLAG_ANTINONINTERACTABLE)
#if VERSION >= VERSION_NTSC_1_0
	unlock_door(OBJ_COCKPITDOOR, 0x40)
#endif
	rebuild_teams
	rebuild_squadrons
	unset_chr_hiddenflag(CHR_BOND, CHRHFLAG_DISGUISED)
	unset_chr_hiddenflag(CHR_COOP, CHRHFLAG_DISGUISED)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func0403_stripes[] = {
	set_returnlist(CHR_SELF, AILIST_STRIPES)
	set_self_chrflag(CHRCFLAG_NOFRIENDLYFIRE)

	beginloop(0x04)
		if_enemy_distance_lt_and_los(2540, /*goto*/ 0x06)

		// No target nearby
		yield
		unset_self_flag_bankx(CHRFLAG1_NOHANDCOMBAT, BANK_1)
		stop_chr
		set_ailist(CHR_SELF, GAILIST_UNALERTED)

		// Got target
		label(0x06)
		if_target_is_player(/*goto*/ 0x06)
		if_chr_dead(CHR_TARGET, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x2d)
		if_chr_knockedout(CHR_TARGET, /*goto*/ 0x2d)
		set_returnlist(CHR_SELF, AILIST_STRIPES)
		set_shotlist(AILIST_STRIPES)
		set_ailist(CHR_SELF, GAILIST_COMBAT_WITH_TARGET)

		label(0x06)
		unset_self_flag_bankx(CHRFLAG1_NOHANDCOMBAT, BANK_1)
		set_ailist(CHR_SELF, GAILIST_UNALERTED)
		set_returnlist(CHR_SELF, GAILIST_UNALERTED)

		label(0x2d)
		set_target_chr(-1)
		stop_chr
	endloop(0x04)

	endlist
};

u8 unregistered_function1[] = {
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

#define check_mine_wasted(chr1, chr2, myflag, buddyflag) \
	set_object_flag(OBJ_COMMSHUB1, OBJFLAG_AIUNDROPPABLE) \
	set_object_flag(OBJ_COMMSHUB2, OBJFLAG_AIUNDROPPABLE) \
	set_object_flag(OBJ_COMMSHUB3, OBJFLAG_AIUNDROPPABLE) \
	set_object_flag(OBJ_COMMSHUB4, OBJFLAG_AIUNDROPPABLE) \
	set_object_flag(OBJ_COMMSHUB5, OBJFLAG_AIUNDROPPABLE) \
	yield \
	yield \
	if_difficulty_lt(DIFF_SA, /*goto*/ 0x06) \
 \
	/* Wait until equipment collected */ \
	beginloop(0x93) \
		if_objective_complete(0, /*goto*/ 0x06) \
	endloop(0x93) \
 \
	label(0x06) \
	yield \
	yield \
	yield \
	yield \
	yield \
	label(0x08) \
	set_target_chr(chr1) \
 \
	/* Wait until mine thrown */ \
	beginloop(0x09) \
		if_ammo_quantity_lt(chr2, AMMOTYPE_TIMED_MINE, 1, /*goto*/ 0x2d) \
	endloop(0x09) \
 \
	label(0x2d) \
	if_stage_flag_eq(VERSION >= VERSION_NTSC_1_0 ? STAGEFLAG_MIDCUTSCENE_FINISHED : STAGEFLAG_PRESIDENT_STARTED_RUNNING, FALSE, /*goto*/ 0x0a) \
	label(0x2d) \
	unset_object_flag(OBJ_COMMSHUB1, OBJFLAG_INVINCIBLE) \
	unset_object_flag(OBJ_COMMSHUB2, OBJFLAG_INVINCIBLE) \
	unset_object_flag(OBJ_COMMSHUB3, OBJFLAG_INVINCIBLE) \
	unset_object_flag(OBJ_COMMSHUB4, OBJFLAG_INVINCIBLE) \
	unset_object_flag(OBJ_COMMSHUB5, OBJFLAG_INVINCIBLE) \
	restart_timer \
 \
	/* Wait 8.3 seconds or until commshub destroyed */ \
	beginloop(0x04) \
		if_timer_gt(500, /*goto*/ 0x0a) \
		if_object_in_good_condition(OBJ_COMMSHUB1, /*goto*/ 0x2d) \
		goto_next(0x06) \
 \
		label(0x2d) \
		if_object_in_good_condition(OBJ_COMMSHUB2, /*goto*/ 0x2d) \
		goto_next(0x06) \
 \
		label(0x2d) \
		if_object_in_good_condition(OBJ_COMMSHUB3, /*goto*/ 0x2d) \
		goto_next(0x06) \
 \
		label(0x2d) \
		if_object_in_good_condition(OBJ_COMMSHUB4, /*goto*/ 0x2d) \
		goto_next(0x06) \
 \
		label(0x2d) \
		if_object_in_good_condition(OBJ_COMMSHUB5, /*goto*/ 0x2d) \
		goto_next(0x06) \
 \
		label(0x2d) \
	endloop(0x04) \
 \
	/* Commshub damaged */ \
	label(0x06) \
	show_hudmsg(CHR_BOND, 0x3615) /* "UFO attachment damaged." */ \
	set_stage_flag(STAGEFLAG_UFO_ATTACHMENT_DAMAGED) \
	unset_stage_flag(STAGEFLAG_BOTH_MINES_WASTED) \
	set_ailist(CHR_SELF, GAILIST_IDLE) \
 \
	/* Mine wasted */ \
	label(0x0a) \
	set_stage_flag(myflag) \
	if_stage_flag_eq(buddyflag, TRUE, /*goto*/ 0x2d) \
	set_ailist(CHR_SELF, GAILIST_IDLE) \
 \
	label(0x2d) \
	show_hudmsg(CHR_BOND, 0x3645) /* "Timed mine has been wasted." */ \
	set_stage_flag(STAGEFLAG_BOTH_MINES_WASTED) \
	set_ailist(CHR_SELF, GAILIST_IDLE)

u8 func1008_check_mine_wasted_bond[] = {
	check_mine_wasted(CHR_BOND, CHR_TARGET, STAGEFLAG_BOND_MINE_WASTED, STAGEFLAG_COOP_MINE_WASTED)
	endlist
};

u8 func1021_check_mine_wasted_coop[] = {
	if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
	goto_next(0x06)
	label(0x2d)
	set_stage_flag(STAGEFLAG_COOP_MINE_WASTED)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	label(0x06)
	check_mine_wasted(CHR_COOP, CHR_COOP, STAGEFLAG_COOP_MINE_WASTED, STAGEFLAG_BOND_MINE_WASTED)
	endlist
};

u8 func101e_blow_mines[] = {
	// Wait for any commshub destroyed
	beginloop(0x04)
		if_object_in_good_condition(OBJ_COMMSHUB1, /*goto*/ 0x2d)
		goto_next(0x06)

		label(0x2d)
		if_object_in_good_condition(OBJ_COMMSHUB2, /*goto*/ 0x2d)
		goto_next(0x06)

		label(0x2d)
		if_object_in_good_condition(OBJ_COMMSHUB3, /*goto*/ 0x2d)
		goto_next(0x06)

		label(0x2d)
		if_object_in_good_condition(OBJ_COMMSHUB4, /*goto*/ 0x2d)
		goto_next(0x06)

		label(0x2d)
		if_object_in_good_condition(OBJ_COMMSHUB5, /*goto*/ 0x2d)
		goto_next(0x06)

		label(0x2d)
	endloop(0x04)

	label(0x06)

	// 1
	unset_object_flag(0x2f, OBJFLAG_INVINCIBLE)
	unset_object_flag2(0x33, OBJFLAG2_INVISIBLE)
	unset_object_flag(0x33, OBJFLAG_INVINCIBLE)
	destroy_object(0x33)
	restart_timer

	beginloop(0x60)
		if_timer_gt(60, /*goto*/ 0x2d)
	endloop(0x60)

	label(0x2d)
	unset_object_flag2(0x2f, OBJFLAG2_INVISIBLE)
	destroy_object(0x2f)

	// 2
	unset_object_flag(0x30, OBJFLAG_INVINCIBLE)
	unset_object_flag2(0x34, OBJFLAG2_INVISIBLE)
	unset_object_flag(0x34, OBJFLAG_INVINCIBLE)
	destroy_object(0x34)
	restart_timer

	beginloop(0x77)
		if_timer_gt(60, /*goto*/ 0x2d)
	endloop(0x77)

	label(0x2d)
	unset_object_flag2(0x30, OBJFLAG2_INVISIBLE)
	destroy_object(0x30)

	// 3
	unset_object_flag(0x31, OBJFLAG_INVINCIBLE)
	unset_object_flag2(0x35, OBJFLAG2_INVISIBLE)
	unset_object_flag(0x35, OBJFLAG_INVINCIBLE)
	destroy_object(0x35)
	restart_timer

	beginloop(0x78)
		if_timer_gt(60, /*goto*/ 0x2d)
	endloop(0x78)

	label(0x2d)
	unset_object_flag2(0x31, OBJFLAG2_INVISIBLE)
	destroy_object(0x31)

	// 4
	unset_object_flag(0x32, OBJFLAG_INVINCIBLE)
	unset_object_flag2(0x36, OBJFLAG2_INVISIBLE)
	unset_object_flag(0x36, OBJFLAG_INVINCIBLE)
	destroy_object(0x36)
	restart_timer

	beginloop(0x79)
		if_timer_gt(60, /*goto*/ 0x2d)
	endloop(0x79)

	label(0x2d)
	unset_object_flag2(0x32, OBJFLAG2_INVISIBLE)
	destroy_object(0x32)

	yield
	disable_object(0x2f)
	disable_object(0x30)
	disable_object(0x31)
	disable_object(0x32)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1009_check_end_level[] = {
	beginloop(0x04)
		if_all_objectives_complete(/*goto*/ 0x06)
	endloop(0x04)

	label(0x06)
	set_stage_flag(STAGEFLAG_ALL_OBJECTIVES_COMPLETE)
	restart_timer
	label(0x08)
	yield
	label(0x06)
	if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2d)
	if_chr_dead(CHR_BOND, /*goto*/ 0x2d)
	if_chr_knockedout(CHR_BOND, /*goto*/ 0x2d)
	goto_next(0x06)

	label(0x2d)
	if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
	if_chr_dead(CHR_COOP, /*goto*/ 0x2d)
	if_chr_knockedout(CHR_COOP, /*goto*/ 0x2d)
	goto_next(0x06)

	// Both players dead
	label(0x2d)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Redundant check
	label(0x06)
	if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2d)
	if_chr_dead(CHR_BOND, /*goto*/ 0x2d)
	if_chr_knockedout(CHR_BOND, /*goto*/ 0x2d)
	goto_next(0x06)

	label(0x2d)
	if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
	if_chr_dead(CHR_COOP, /*goto*/ 0x2d)
	if_chr_knockedout(CHR_COOP, /*goto*/ 0x2d)
	goto_next(0x06)

	label(0x2d)
	end_level
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Mission complete
	label(0x06)
	set_invincible(CHR_BOND)
	set_ailist(CHR_SELF, AILIST_OUTRO)
	endlist
};

u8 func100a_autopilot_switch[] = {
	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		if_object_in_good_condition(OBJ_AUTOPILOT_SWITCH, /*goto*/ 0x2d)
		goto_next(0x08)

		label(0x2d)
		if_chr_activated_object(CHR_P1P2, OBJ_AUTOPILOT_SWITCH, /*goto*/ 0x2d)
		if_stage_flag_eq(STAGEFLAG_PLANE_STABILIZED, TRUE, /*goto*/ 0x2d)
		reloop(0x04)

		label(0x2d)
		label(0x06)
		if_stage_flag_eq(STAGEFLAG_PLANE_NOSEDIVING, TRUE, /*goto*/ 0x06)
	endloop(0x04)

	// Switch pressed
	label(0x06)
	assign_sound(SFX_043A, CHANNEL_7)
	set_object_sound_playing(CHANNEL_7, OBJ_AUTOPILOT_SWITCH, TRUE)
	set_object_image(OBJ_AUTOPILOT_SWITCH, 0, TVCMDLIST_13)
	set_stage_flag(STAGEFLAG_PLANE_STABILIZED)
	yield
	show_hudmsg(CHR_P1P2, L_RIT_024) // "Air Force One has been stabilized."
	show_hudmsg(CHR_P1P2, L_RIT_023) // "Autopilot has been activated."
	restart_timer

	beginloop(0x0e)
		if_timer_gt(120, /*goto*/ 0x06)
	endloop(0x0e)

	label(0x06)
	configure_environment(0x0000, AIENVCMD_STOPNOSEDIVE, 0)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Switch destroyed
	label(0x08)
	show_hudmsg(CHR_P1P2, L_RIT_025) // "Autopilot systems have been destroyed."
	set_stage_flag(STAGEFLAG_AUTOPILOT_DESTROYED)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func0406_init_president[] = {
	set_chr_maxdamage(CHR_SELF, 0)
	set_ailist(CHR_SELF, AILIST_PRESIDENT_IN_ROOM)
	endlist
};

u8 func0405_president_in_room[] = {
	set_shotlist(AILIST_PRESIDENT_IN_ROOM)
	if_chr_death_animation_finished(CHR_SELF, /*goto*/ 0x2d)
	if_chr_dead(CHR_SELF, /*goto*/ 0x2d)
	if_chr_knockedout(CHR_SELF, /*goto*/ 0x2d)
	goto_next(0x06)

	// Dying
	label(0x2d)
	set_shotlist(GAILIST_IDLE)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Alive
	label(0x06)
	stop_chr
	yield

	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_00100000, TRUE, /*goto*/ 0x03)
		if_chr_death_animation_finished(CHR_SELF, /*goto*/ 0x2d)
		if_chr_dead(CHR_SELF, /*goto*/ 0x2d)
		if_chr_knockedout(CHR_SELF, /*goto*/ 0x2d)
	endloop(0x04)

	// Dying
	label(0x2d)
	set_shotlist(GAILIST_IDLE)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	label(0x03)
	set_target_chr(CHR_PRESET)
	restart_timer
	label(0x08)
	try_face_entity(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x09)

	beginloop(0x09)
		// Wait for Carrington's "on this level" message to finish
		if_sound_finished(CHANNEL_6, /*goto*/ 0x2d)
		reloop(0x09)

		label(0x2d)
		if_target_in_fov_left(10, /*goto*/ 0x06)
		if_timer_gt(60, /*goto*/ 0x06)
	endloop(0x09)

	label(0x06)
	do_preset_animation(PRESETANIM_TALK0)
	speak(CHR_TARGET, L_RIT_035, MP3_02C5, CHANNEL_6, COLOR_08_RED) // "Who are you, young lady?"
	restart_timer

	beginloop(0x60)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0055, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0056, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0057, /*goto*/ 0x2d)
		if_los_to_target(/*goto*/ 0x2d)
		goto_next(0x86)

		label(0x2d)
		if_saw_injury(0x00, /*goto*/ 0x86)
		if_hears_target(/*goto*/ 0x86)
		if_timer_lt(120, /*goto*/ 0x2d)
		if_target_aiming_at_me(/*goto*/ 0x06)
		label(0x2d)
	endloop(0x60)

	label(0x06)
	speak(CHR_TARGET, L_RIT_037, MP3_02BC, CHANNEL_7, COLOR_09_BLUE) // "Mr. President, you're in danger. Trent is trying t..."
	restart_timer
	stop_chr
	try_face_entity(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x78)

	// In this loop the president will continue to turn to face the player
	// because it lacks an if_target_in_fov_left check.
	beginloop(0x78)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0055, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0056, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0057, /*goto*/ 0x2d)
		if_los_to_target(/*goto*/ 0x2d)
		goto_next(0x86)

		label(0x2d)
		if_saw_injury(0x00, /*goto*/ 0x86)
		if_hears_target(/*goto*/ 0x86)
		if_timer_lt(240, /*goto*/ 0x2d)
		if_target_aiming_at_me(/*goto*/ 0x06)
		label(0x2d)
	endloop(0x78)

	label(0x06)
	do_preset_animation(PRESETANIM_TALK1)
	speak(CHR_TARGET, L_RIT_040, MP3_02C6, CHANNEL_6, COLOR_08_RED) // "You can't make accusations like that without evide..."
	restart_timer

	beginloop(0x79)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0055, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0056, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0057, /*goto*/ 0x2d)
		if_los_to_target(/*goto*/ 0x2d)
		goto_next(0x86)

		label(0x2d)
		if_saw_injury(0x00, /*goto*/ 0x86)
		if_hears_target(/*goto*/ 0x86)
		if_timer_lt(400, /*goto*/ 0x2d)
		goto_next(0x84)

		label(0x2d)
	endloop(0x79)

	label(0x84)
	if_chr_has_object(CHR_TARGET, OBJ_EQUIPMENT, /*goto*/ 0x10)
	if_chr_has_object(CHR_TARGET, OBJ_EQUIPMENT_COOP, /*goto*/ 0x10)

	// No equipment
	label(0x85)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_DISGUISE_UNCOVERED)
	set_chr_hiddenflag(CHR_COOP, CHRHFLAG_DISGUISE_UNCOVERED)
	speak(CHR_TARGET, L_RIT_036, MP3_02C4, CHANNEL_6, COLOR_08_RED) // "Security, SECURITY!!"
	restart_timer
	chr_do_animation(ANIM_TALKING_0231, 0, 193, CHRANIMFLAG_COMPLETED | CHRANIMFLAG_SLOWUPDATE, 16, CHR_SELF, 2)

	beginloop(0x77)
		if_timer_gt(120, /*goto*/ 0x06)
	endloop(0x77)

	label(0x06)
	set_ailist(0x01, GAILIST_UNALERTED)
	set_ailist(CHR_STEWARDESS, GAILIST_UNALERTED)
	set_ailist(CHR_STEWARD, GAILIST_UNALERTED)
	set_ailist(0x04, GAILIST_UNALERTED)
	set_ailist(0x05, GAILIST_UNALERTED)
	set_ailist(0x06, GAILIST_UNALERTED)
	set_ailist(0x07, GAILIST_UNALERTED)
	set_ailist(0x08, GAILIST_UNALERTED)
	set_ailist(0x09, GAILIST_UNALERTED)
	set_ailist(0x0a, GAILIST_UNALERTED)
	set_ailist(0x0b, GAILIST_UNALERTED)
	set_ailist(0x0c, GAILIST_UNALERTED)
	set_ailist(0x0d, GAILIST_UNALERTED)
	set_ailist(0x0e, GAILIST_UNALERTED)
	set_ailist(0x0f, GAILIST_UNALERTED)
	set_ailist(0x10, GAILIST_UNALERTED)
	set_ailist(0x11, GAILIST_UNALERTED)
	set_ailist(0x12, GAILIST_UNALERTED)
	set_ailist(0x13, GAILIST_UNALERTED)
	set_ailist(0x14, GAILIST_UNALERTED)
	set_ailist(0x15, GAILIST_UNALERTED)
	set_stage_flag(STAGEFLAG_PRESIDENT_CALLED_SECURITY)
	yield
	increase_squadron_alertness(100)
	try_face_entity(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x0a)

	beginloop(0x0a)
	endloop(0x0a)

	label(0x06)

	// Has equipment
	label(0x10)
	stop_chr
	speak(CHR_TARGET, L_RIT_041, MP3_02BD, CHANNEL_6, COLOR_09_BLUE) // "This is a recording of a meeting between Trent and..."
	restart_timer
	try_face_entity(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x0b)

	// This loop uses an if_sound_finished check rather than a timer check,
	// which allows the speech to be skipped.
	beginloop(0x0b)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0055, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0056, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0057, /*goto*/ 0x2d)
		if_los_to_target(/*goto*/ 0x2d)
		goto_next(0x86)

		label(0x2d)
		if_saw_injury(0x00, /*goto*/ 0x86)
		if_hears_target(/*goto*/ 0x86)
		if_sound_finished(CHANNEL_6, /*goto*/ 0x06)
	goto_first(0x0b)

	label(0x06)
	do_preset_animation(PRESETANIM_TALK2)
	speak(CHR_TARGET, L_RIT_042, MP3_02C7, CHANNEL_6, COLOR_08_RED) // "Seems overwhelming... I'm in your hands. What do w..."
	restart_timer

	beginloop(0x7a)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0055, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0056, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0057, /*goto*/ 0x2d)
		if_los_to_target(/*goto*/ 0x2d)
		goto_next(0x86)

		label(0x2d)
		if_saw_injury(0x00, /*goto*/ 0x86)
		if_hears_target(/*goto*/ 0x86)
		if_timer_gt(400, /*goto*/ 0x06)
	endloop(0x7a)

	label(0x33)
	label(0x06)
	set_stage_flag(STAGEFLAG_TRIGGER_MIDCUTSCENE)

	beginloop(0x0d)
		if_stage_flag_eq(STAGEFLAG_MIDCUTSCENE_FINISHED, TRUE, /*goto*/ 0x06)
	endloop(0x0d)

	label(0x06)
	set_chr_team(CHR_SELF, TEAM_ALLY)
	rebuild_teams
	rebuild_squadrons
	disable_object(OBJ_EXTERIOR_DOOR)
	disable_object(OBJ_FLOORHATCH)
	set_object_flag(OBJ_FLOOR_HATCH_DETACHED, OBJFLAG_00000100)
	unset_object_flag2(OBJ_FLOOR_HATCH_DETACHED, OBJFLAG2_INVISIBLE)
	unset_object_flag2(OBJ_EXTERIOR_DOOR_DETACHED, OBJFLAG2_INVISIBLE)
	set_object_flag(OBJ_EXTERIOR_DOOR_DETACHED, OBJFLAG_00000100)
	play_sound(SFX_EXPLOSION_8098, -1)
	restart_timer

	beginloop(0x7b)
		if_timer_gt(60, /*goto*/ 0x06)
	endloop(0x7b)

	label(0x06)
	do_preset_animation(PRESETANIM_TALKRANDOM)
	speak(CHR_TARGET, L_RIT_038, SFX_816E, CHANNEL_6, COLOR_08_RED) // "What the hell was that!"
	restart_timer

	beginloop(0x0c)
		if_timer_gt(180, /*goto*/ 0x06)
	endloop(0x0c)

	label(0x06)
	stop_chr
	set_stage_flag(STAGEFLAG_PRESIDENT_STARTED_RUNNING)
#if VERSION < VERSION_NTSC_1_0
	unlock_door(OBJ_COCKPITDOOR, 0x40)
#endif
	speak(CHR_TARGET, L_RIT_039, MP3_02BE, CHANNEL_6, COLOR_09_BLUE) // "We have to get you to the escape pod. Follow me."
	restart_timer
	try_face_entity(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x0e)

	beginloop(0x0e)
		if_timer_gt(120, /*goto*/ 0x06)
	endloop(0x0e)

	label(0x06)
	set_chrpreset(CHR_TARGET)
	set_chr_maxdamage(CHR_SELF, 500)
	set_shotlist(AILIST_PRESIDENT_RUNNING)
	set_ailist(CHR_SELF, AILIST_PRESIDENT_RUNNING)

	label(0x86)
	goto_first(0x85)

	endlist
};

u8 func0404_president_running[] = {
	set_self_chrflag(CHRCFLAG_PUSHABLE)
	set_shotlist(AILIST_PRESIDENT_RUNNING)
	set_target_chr(CHR_PRESET)
	if_chr_dead(CHR_SELF, /*goto*/ 0x06)
	if_chr_death_animation_finished(CHR_SELF, /*goto*/ 0x06)
	if_chr_knockedout(CHR_SELF, /*goto*/ 0x06)
	goto_next(0x2d)

	// Dying
	label(0x06)
	set_shotlist(GAILIST_IDLE)
	restart_timer

	beginloop(0x54)
		if_timer_gt(15, /*goto*/ 0x06)
	endloop(0x54)

	label(0x06)
	assign_sound(MP3_02BF, CHANNEL_6)
	play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
	set_shotlist(GAILIST_IDLE)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Alive
	label(0x2d)
	dprint 'b','4',' ','s','h','i','e','l','d',' ','c','h','e','c','k','\n',0,
	if_just_injured(CHR_SELF, /*goto*/ 0x06)
	goto_next(0x55)

	// Injured
	label(0x06)
	restart_timer
	assign_sound(MP3_02C2, CHANNEL_6)
	play_sound_from_entity(CHANNEL_6, CHR_SELF, 0x0bb8, 0x1770, 0x01)
	if_stage_flag_eq(STAGEFLAG_PRESIDENT_INJURED, TRUE, /*goto*/ 0x56)
	set_stage_flag(STAGEFLAG_PRESIDENT_INJURED)
	show_hudmsg(CHR_BOND, L_RIT_072) // "The President is under attack."

	beginloop(0x56)
		if_num_times_shot_lt(1, /*goto*/ 0x06)
		if_timer_lt(20, /*goto*/ 0x06)

		label(0x06)
		if_chr_stopped(/*goto*/ 0x55)
	endloop(0x56)

	// Not injured, or injury animation finished
	label(0x55)
	stop_chr
	restart_timer

	beginloop(0x57)
		// @bug: This FALSE should be TRUE instead. This causes the president
		// to behave weirdly when you've killed both blondes and stand in the
		// entrance to Trent's room.
		if_stage_flag_eq(STAGEFLAG_BOTH_BLONDES_DEAD, FALSE, /*goto*/ 0x2d)

		// Both blondes dead
		// This room is the entrance to Trent's room
		if_chr_in_room(CHR_TARGET, 0x00, 0x000d, /*goto*/ 0x10)

		// At least one Blonde is alive, or follow through
		// These rooms are the escape pod area
		label(0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0030, /*goto*/ 0x11)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0031, /*goto*/ 0x11)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0032, /*goto*/ 0x11)
		dprint 't','a','r','g','e','t','\n',0,
		if_los_to_target(/*goto*/ 0x06)
		goto_next(0x58)

		label(0x06)
		if_timer_gt(1250, /*goto*/ 0x2d)
		if_distance_to_target_gt(200, /*goto*/ 0x58)
	endloop(0x57)

	// Been in sight for almost 21 seconds - say quip
	label(0x2d)
	call_rng
	if_rand_lt(64, /*goto*/ 0x2d)
	say_quip(CHR_BOND, 0x21, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
	goto_first(0x55)

	label(0x2d)
	say_quip(CHR_BOND, 0x21, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
	goto_first(0x55)

	// Unreachable
	label(0x06)
	say_quip(CHR_BOND, 0x21, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
	goto_first(0x55)

	// Distance to player > 200 or line of sight broken, so start following
	label(0x58)
	restart_timer
	label(0x2d)
	try_jog_to_target(/*goto*/ 0x59)

	beginloop(0x59)
		// @bug: This FALSE should be TRUE instead. This causes the president
		// to behave weirdly when you've killed both blondes and stand in the
		// entrance to Trent's room.
		if_stage_flag_eq(STAGEFLAG_BOTH_BLONDES_DEAD, FALSE, /*goto*/ 0x2d)

		// Both blondes dead
		// This room is the entrance to Trent's room
		if_chr_in_room(CHR_TARGET, 0x00, 0x000d, /*goto*/ 0x10)

		// At least one Blonde is alive, or follow through
		// These rooms are the escape pod area
		label(0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0030, /*goto*/ 0x11)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0031, /*goto*/ 0x11)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0032, /*goto*/ 0x11)
		if_distance_to_target_lt(100, /*goto*/ 0x5b)
		if_chr_stopped(/*goto*/ 0x5b)
		if_timer_gt(360, /*goto*/ 0x2d)
	endloop(0x59)

	label(0x2d)
	say_quip(CHR_BOND, 0x21, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
	goto_first(0x58)

	label(0x06)
	say_quip(CHR_BOND, 0x21, 0xff, 0x02, 0xff, BANK_1, 0x00, 0x00)
	goto_first(0x58)

	// Stopped because president is close to player's sampled prop
	label(0x5b)
	goto_first(0x55)

	// Unreachable
	label(0x5c)
	try_run_to_target(/*goto*/ 0x5d)

	beginloop(0x5d)
		if_stage_flag_eq(STAGEFLAG_BOTH_BLONDES_DEAD, FALSE, /*goto*/ 0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x000d, /*goto*/ 0x10)
		label(0x2d)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0030, /*goto*/ 0x11)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0031, /*goto*/ 0x11)
		if_chr_in_room(CHR_TARGET, 0x00, 0x0032, /*goto*/ 0x11)
	endloop(0x5d)

	label(0x5e)
	goto_first(0x55)

	// Player in pod room while a Blonde is alive
	// This pad is at the escape pod
	label(0x11)
	jog_to_pad(PAD_RIT_0083)

	beginloop(0x09)
		if_chr_stopped(/*goto*/ 0x06)
	endloop(0x09)

	label(0x06)
	stop_chr
	set_stage_flag(STAGEFLAG_PRESIDENT_AT_POD)
	set_chr_team(CHR_SELF, TEAM_NONCOMBAT)
	rebuild_teams
	rebuild_squadrons
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Player is in the entrance to Trent's room and both blondes are dead.
	// The intention behind this code is to make the president cower until the
	// Blondes are dead, then resume following. However, due to a logic bug
	// described earlier this code is jumped to only after the blondes are dead.
	label(0x10)
	run_to_pad(PAD_RIT_0019)

	// This loop will never iterate because the blondes are already dead
	beginloop(0x0a)
		if_chr_stopped(/*goto*/ 0x0b)
		if_stage_flag_eq(STAGEFLAG_BOTH_BLONDES_DEAD, TRUE, /*goto*/ 0x06)
	endloop(0x0a)

	// Unreachable under real conditions
	label(0x0b)
	chr_do_animation(ANIM_COWER_0229, -1, -1, CHRANIMFLAG_SLOWUPDATE, 10, CHR_SELF, 2)

	beginloop(0x83)
		if_stage_flag_eq(STAGEFLAG_BOTH_BLONDES_DEAD, TRUE, /*goto*/ 0x06)
		if_chr_stopped(/*goto*/ 0x2d)
	endloop(0x83)

	label(0x2d)
	goto_first(0x0b)

	// Both blondes dead - resume running
	label(0x06)
	goto_first(0x55)

	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func100b_check_president_dead[] = {
	beginloop(0x04)
		if_chr_dead(CHR_PRESIDENT, /*goto*/ 0x06)
		if_chr_death_animation_finished(CHR_PRESIDENT, /*goto*/ 0x06)
		if_chr_knockedout(CHR_PRESIDENT, /*goto*/ 0x06)
	endloop(0x04)

	label(0x06)
	set_stage_flag(STAGEFLAG_PRESIDENT_DEAD)
	show_hudmsg(CHR_BOND, L_RIT_026) // "The President has been incapacitated."
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func0409_unused[] = {
	set_self_chrflag(CHRCFLAG_NOFRIENDLYFIRE)

	beginloop(0x04)
		if_enemy_distance_lt_and_los(2540, /*goto*/ 0x06)
		reloop(0x04)

		label(0x06)
		if_target_is_player(/*goto*/ 0x06)
		if_chr_dead(CHR_TARGET, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x2d)
		if_chr_knockedout(CHR_TARGET, /*goto*/ 0x2d)
		set_returnlist(CHR_SELF, 0x0409)
		set_shotlist(0x0409)
		set_ailist(CHR_SELF, GAILIST_COMBAT_WITH_TARGET)

		label(0x2d)
	endloop(0x04)

	label(0x06)
	unset_self_flag_bankx(CHRFLAG1_NOHANDCOMBAT, BANK_1)
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	set_returnlist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

/**
 * This stripes guard is in one of the cockpit rooms.
 */
u8 func100c_cockpit_stripes[] = {
	set_shotlist(GAILIST_ALERTED)
	set_chr_team(CHR_SELF, TEAM_04)
	rebuild_teams
	rebuild_squadrons
	set_chr_dodge_rating(2, 0)
	set_accuracy(14)
	set_reaction_speed(50)
	set_chr_maxdamage(CHR_SELF, 60)
	add_health_or_armor(0)
	set_recovery_speed(30)
	set_shield(0)
	set_self_chrflag(CHRCFLAG_NOFRIENDLYFIRE)

	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		set_target_chr(CHR_P1P2)
		if_los_to_target(/*goto*/ 0x06)
		if_enemy_distance_lt_and_los(2540, /*goto*/ 0x06)
		reloop(0x04)

		label(0x06)
		if_target_is_player(/*goto*/ 0x06)
		if_chr_dead(CHR_TARGET, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x2d)
		if_chr_knockedout(CHR_TARGET, /*goto*/ 0x2d)
		set_returnlist(CHR_SELF, AILIST_COCKPIT_STRIPES)
		set_shotlist(GAILIST_COMBAT_WITH_TARGET)
		set_ailist(CHR_SELF, GAILIST_COMBAT_WITH_TARGET)
		label(0x2d)
	endloop(0x04)

	label(0x06)
	unset_self_flag_bankx(CHRFLAG1_NOHANDCOMBAT, BANK_1)
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	set_returnlist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

u8 func040f_taker1[] = {
	set_chr_team(CHR_SELF, TEAM_04)
	rebuild_teams
	rebuild_squadrons
	set_self_chrflag(CHRCFLAG_LOSEXTRAHEIGHT)
	set_chr_dodge_rating(2, 0)
	set_reaction_speed(50)
	set_chr_maxdamage(CHR_SELF, 60)
	add_health_or_armor(0)
	set_recovery_speed(30)
	set_shield(0)
	set_target_chr(CHR_PILOT1)
	set_ailist(CHR_SELF, AILIST_TAKER)
	endlist
};

u8 func0410_taker2[] = {
	set_chr_team(CHR_SELF, TEAM_04)
	rebuild_teams
	rebuild_squadrons
	set_self_chrflag(CHRCFLAG_LOSEXTRAHEIGHT)
	set_chr_dodge_rating(2, 0)
	set_reaction_speed(50)
	set_chr_maxdamage(CHR_SELF, 60)
	add_health_or_armor(0)
	set_recovery_speed(30)
	set_shield(0)
	set_target_chr(CHR_PILOT2)
	set_ailist(CHR_SELF, AILIST_TAKER)
	endlist
};

u8 func0413_taker[] = {
	set_shotlist(GAILIST_ALERTED)
	unset_self_chrflag(CHRCFLAG_INVINCIBLE)
	set_chr_team(CHR_SELF, TEAM_04)
	rebuild_teams
	rebuild_squadrons
	set_accuracy(50)
	set_self_chrflag(CHRCFLAG_NOFRIENDLYFIRE)
	restart_timer

	// Wait for condition
	beginloop(0x04)
		if_door_state(0x0c, (DOORSTATE_OPEN | DOORSTATE_CLOSING | DOORSTATE_OPENING), /*goto*/ 0x0a)
		if_stage_flag_eq(STAGEFLAG_PRESIDENT_STARTED_RUNNING, FALSE, /*goto*/ 0x2d)
		if_timer_gt(7200, /*goto*/ 0x0a)
		if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x0a)
		label(0x2d)
	endloop(0x04)

	// Wait another 1.5 seconds
	label(0x0a)
	restart_timer

	beginloop(0x0c)
		if_timer_gt(90, /*goto*/ 0x06)
	endloop(0x0c)

	label(0x06)
	if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x11)
	if_chr_dead(CHR_TARGET, /*goto*/ 0x11)
	if_chr_knockedout(CHR_TARGET, /*goto*/ 0x11)
	try_attack_stand(ATTACKFLAG_AIMATTARGET | ATTACKFLAG_AIMONLY, 0, /*goto*/ 0x06)
	label(0x06)
	try_modify_attack(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x08)
	label(0x08)
	say_quip(CHR_BOND, QUIP_ATTACK1, 0x19, 0x02, 0x00, BANK_0, 0x00, 0x00)
	say_quip(CHR_BOND, QUIP_ATTACK2, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
	restart_timer

	beginloop(0x09)
		if_chr_stopped(/*goto*/ 0x06)
		if_timer_gt(60, /*goto*/ 0x2d)
	endloop(0x09)

	label(0x2d)
	if_target_is_player(/*goto*/ 0x11)
	if_chrpresets_target_is_different(/*goto*/ 0x2d)
	goto_next(0x11)

	label(0x2d)
	damage_chr(CHR_TARGET, WEAPON_SUPERDRAGON)

	beginloop(0x0b)
		if_chr_stopped(/*goto*/ 0x06)
	endloop(0x0b)

	label(0x06)
	if_chr_dead(CHR_TARGET, /*goto*/ 0x06)
	goto_first(0x0a)

	label(0x11)
	label(0x06)
	unset_self_flag_bankx(CHRFLAG1_NOHANDCOMBAT, BANK_1)
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

u8 func100c_cockpit[] = {
	label(0x2d)
	label(0x2e)
	set_chr_chrflag(CHR_TAKER1, CHRCFLAG_HIDDEN)
	set_chr_chrflag(CHR_TAKER2, CHRCFLAG_HIDDEN)

	beginloop(0x60)
		if_all_objectives_complete(/*goto*/ 0x2d)
		if_stage_flag_eq(STAGEFLAG_UFO_ATTACHMENT_DAMAGED, TRUE, /*goto*/ 0x2e)
	endloop(0x60)

	// All objectives complete
	label(0x2d)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// UFO attachment damaged
	label(0x2e)
	yield
	if_stage_flag_eq(STAGEFLAG_ALL_OBJECTIVES_COMPLETE, TRUE, /*goto*/ 0x11)
	unset_chr_chrflag(CHR_TAKER1, CHRCFLAG_HIDDEN)
	unset_chr_chrflag(CHR_TAKER2, CHRCFLAG_HIDDEN)
	unset_chr_chrflag(CHR_TAKER1, CHRCFLAG_INVINCIBLE)
	unset_chr_chrflag(CHR_TAKER2, CHRCFLAG_INVINCIBLE)
	label(0x06)

	// This loop will surely never iterate because
	// the UFO attachment is already damaged
	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_ALL_OBJECTIVES_COMPLETE, TRUE, /*goto*/ 0x11)
		if_stage_flag_eq(STAGEFLAG_UFO_ATTACHMENT_DAMAGED, TRUE, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	if_chr_dead(CHR_TAKER1, /*goto*/ 0x2d)
	if_chr_death_animation_finished(CHR_TAKER1, /*goto*/ 0x2d)
	if_chr_knockedout(CHR_TAKER1, /*goto*/ 0x2d)
	goto_next(0x06)

	label(0x2d)
	if_chr_dead(CHR_TAKER2, /*goto*/ 0x2d)
	if_chr_death_animation_finished(CHR_TAKER2, /*goto*/ 0x2d)
	if_chr_knockedout(CHR_TAKER2, /*goto*/ 0x2d)
	goto_next(0x06)

	// Both takers dead
	label(0x2d)
	goto_next(0x2e)

	// At least one taker alive
	label(0x06)
	damage_chr(CHR_PILOT1, WEAPON_SUPERDRAGON)
	damage_chr(CHR_PILOT2, WEAPON_SUPERDRAGON)
	yield
	damage_chr(CHR_PILOT1, WEAPON_SUPERDRAGON)
	damage_chr(CHR_PILOT2, WEAPON_SUPERDRAGON)
	yield
	damage_chr(CHR_PILOT1, WEAPON_SUPERDRAGON)
	damage_chr(CHR_PILOT2, WEAPON_SUPERDRAGON)
	yield
	set_stage_flag(STAGEFLAG_PILOTS_DEAD)
	show_hudmsg(CHR_BOND, L_RIT_027) // "Pilots have been killed."
	goto_next(0x06)

	// Both takers dead
	label(0x2e)

	// Pilots killed
	label(0x06)
	label(0x10)
	set_stage_flag(STAGEFLAG_PLANE_NOSEDIVING)
	set_object_image(OBJ_AUTOPILOT_SWITCH, 0, TVCMDLIST_0F)

	// Wait 10 seconds
	label(0x09)
	restart_timer

	beginloop(0x0f)
		if_stage_flag_eq(STAGEFLAG_ALL_OBJECTIVES_COMPLETE, TRUE, /*goto*/ 0x11)
		if_timer_gt(600, /*goto*/ 0x2d)
	endloop(0x0f)

	label(0x2d)
	configure_environment(0x0000, AIENVCMD_PLAYNOSEDIVE, 60)

	// Wait 40 seconds or for autopilot
	restart_timer

	beginloop(0x0a)
		if_stage_flag_eq(STAGEFLAG_PLANE_STABILIZED, TRUE, /*goto*/ 0x11)
		if_timer_gt(2400, /*goto*/ 0x0b)
	endloop(0x0a)

	label(0x0b)
	if_stage_flag_eq(STAGEFLAG_ALL_OBJECTIVES_COMPLETE, TRUE, /*goto*/ 0x11)
	show_hudmsg(CHR_BOND, L_RIT_029) // "Air Force One is about to crash."

	// Wait until the 50 second mark
	beginloop(0x0c)
		if_all_objectives_complete(/*goto*/ 0x11)
		if_stage_flag_eq(STAGEFLAG_PLANE_STABILIZED, TRUE, /*goto*/ 0x11)
		if_timer_gt(3000, /*goto*/ 0x0e)
	endloop(0x0c)

	// Crash
	label(0x0e)
	set_stage_flag(STAGEFLAG_PLANE_CRASHED)
	explosions_around_chr(CHR_BOND)
	restart_timer

	beginloop(0x65)
		if_timer_gt(180, /*goto*/ 0x2d)
	endloop(0x65)

	label(0x2d)
	end_level
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Unreachable
	label(0x7c)
	label(0x2d)
	set_object_image(0x03, 0, TVCMDLIST_13)
	set_stage_flag(STAGEFLAG_PLANE_STABILIZED)
	show_hudmsg(CHR_BOND, L_RIT_028) // "Pilots have been saved."
	stop_ambient_track
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Unreachable
	label(0x08)
	goto_first(0x04)

	// Plane stabilized or all objectives complete
	label(0x11)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

/**
 * Assigned to a pilot and a cyclone guard.
 */
u8 func0411_typing_guy[] = {
	set_shotlist(AILIST_TYPING_GUY)
	label(0x04)
	chr_do_animation(ANIM_SITTING_TYPING, 0, -1, CHRANIMFLAG_PAUSEATEND, 16, CHR_SELF, 2)

	beginloop(0x03)
		if_chr_idle(/*goto*/ 0x06)
		goto_first(0x04)

		label(0x06)
	endloop(0x03)

	endlist
};

/**
 * Assigned to a pilot and a cyclone guard.
 */
u8 func0412_sitting_guy[] = {
	set_shotlist(AILIST_SITTING_GUY)
	label(0x04)
	chr_do_animation(ANIM_SITTING_DORMANT, 0, -1, CHRANIMFLAG_PAUSEATEND, 16, CHR_SELF, 2)

	beginloop(0x03)
		if_chr_idle(/*goto*/ 0x06)
		goto_first(0x04)

		label(0x06)
	endloop(0x03)

	endlist
};

u8 func0426_start_path00[] = {
	set_chr_dodge_rating(2, 0)
	set_accuracy(14)
	set_reaction_speed(70)
	set_chr_maxdamage(CHR_SELF, 40)
	add_health_or_armor(0)
	set_recovery_speed(0)
	set_shield(0)
	assign_path(0)
	start_patrol
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

u8 func0427_start_path01[] = {
	set_chr_dodge_rating(2, 0)
	set_accuracy(14)
	set_reaction_speed(70)
	set_chr_maxdamage(CHR_SELF, 40)
	add_health_or_armor(0)
	set_recovery_speed(0)
	set_shield(0)
	assign_path(1)
	start_patrol
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

u8 func0428_start_path02[] = {
	assign_path(2)
	start_patrol
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

u8 func1002_intro[] = {
	set_chr_chrflag(CHR_COOP, CHRCFLAG_HIDDEN)
	set_chr_chrflag(CHR_ANTI, CHRCFLAG_HIDDEN)
	play_cutscene_track(MUSIC_AIRFORCEONE_INTRO)
	camera_movement(ANIM_CUT_RIT_INTRO_CAM_01)
	set_chr_chrflag(0x30, CHRCFLAG_UNPLAYABLE)
	unset_chr_chrflag(0x30, CHRCFLAG_HIDDEN)
	set_chr_hiddenflag(0x30, CHRHFLAG_00020000)
	chr_do_animation(ANIM_CUT_RIT_INTRO_STR, -1, -1, CHRANIMFLAG_MOVEWHENINVIS | CHRANIMFLAG_PAUSEATEND, 0, 0x30, 4)
	set_chr_chrflag(0x31, CHRCFLAG_UNPLAYABLE)
	unset_chr_chrflag(0x31, CHRCFLAG_HIDDEN)
	set_chr_hiddenflag(0x31, CHRHFLAG_00020000)
	chr_do_animation(ANIM_CUT_RIT_INTRO_TRENT, -1, -1, CHRANIMFLAG_MOVEWHENINVIS | CHRANIMFLAG_PAUSEATEND, 0, 0x31, 4)
	set_chr_chrflag(CHR_PRESIDENT, CHRCFLAG_UNPLAYABLE)
	unset_chr_chrflag(CHR_PRESIDENT, CHRCFLAG_HIDDEN)
	set_chr_hiddenflag(CHR_PRESIDENT, CHRHFLAG_00020000)
	chr_do_animation(ANIM_CUT_RIT_INTRO_PRES, -1, -1, CHRANIMFLAG_MOVEWHENINVIS | CHRANIMFLAG_PAUSEATEND, 0, CHR_PRESIDENT, 4)
	set_chr_chrflag(0x13, CHRCFLAG_HIDDEN)
	set_chr_chrflag(0x14, CHRCFLAG_HIDDEN)
	restart_timer
	fade_to_color(0x000000ff, 0)
	fade_to_color(0x00000000, 90)
	set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)
	yield
	set_cutscene_weapon(CHR_BOND, WEAPON_NONE, WEAPON_NONE)

	#define wait_until(time, loopid) \
		beginloop(loopid) \
			if_controller_button_pressed(/*goto*/ 0x7d) \
			if_timer_gt(time, /*goto*/ 0x06) \
		endloop(loopid) \
		label(0x06)

	wait_until(140, 0x94)

	wait_until(180, 0x60)
	speak(CHR_BOND, L_RIT_073, MP3_044C, CHANNEL_7, COLOR_05_GREEN) // "Have you thought any more about that proposal I ga..."

	wait_until(330, 0x95)

	wait_until(360, 0x96)

	wait_until(438, 0x77)
	speak(CHR_BOND, L_RIT_074, MP3_044D, CHANNEL_7, COLOR_08_RED) // "My answer remains the same... I'm sorry Trent, but..."

	wait_until(486, 0x97)

	wait_until(532, 0x98)

	wait_until(850, 0x99)

	wait_until(1020, 0x78)
	speak(CHR_BOND, L_RIT_075, MP3_044E, CHANNEL_7, COLOR_05_GREEN) // "But this is a golden opportunity to show that Amer..."

	wait_until(1402, 0x79)
	speak(CHR_BOND, L_RIT_076, SFX_81BB, CHANNEL_7, COLOR_08_RED) // "Damn it, man! I say no and I mean no! I'm not gonn..."

	wait_until(2348, 0x7a)
	speak(CHR_BOND, L_RIT_077, MP3_0450, CHANNEL_7, COLOR_05_GREEN) // "As you wish, sir."

	wait_until(2406, 0x9a)

	wait_until(2410, 0x62)
	open_door(0x15)

	wait_until(2465, 0x9b)

	wait_until(2498, 0x9c)

	wait_until(2560, 0x9d)

	wait_until(2616, 0x9e)

	wait_until(2654, 0x7b)
	speak(CHR_BOND, L_RIT_078, MP3_0451, CHANNEL_7, COLOR_05_GREEN) // "My last chance? Ha! You fool. That was yours."
	close_door(0x15)
	play_sound(SFX_DOOR_8008, CHANNEL_CUTSCENE)

	wait_until(2680, 0x9f)

	wait_until(2710, 0xa0)

	wait_until(2790, 0xa5)

	wait_until(3140, 0xa1)

	wait_until(3180, 0xa2)

	wait_until(3190, 0xa3)

	wait_until(3210, 0xa4)

	beginloop(0x08)
		if_camera_animating(/*goto*/ 0x2d)
		goto_next(0x7d)

		label(0x2d)
		if_controller_button_pressed(/*goto*/ 0x7d)
		label(0x2d)
	endloop(0x08)

	label(0x7d)
	mute_channel(CHANNEL_CUTSCENE)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_DISGUISED)
	if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
	set_chr_hiddenflag(CHR_COOP, CHRHFLAG_DISGUISED)
	label(0x2d)
	if_savefile_flag_is_set(GAMEFILEFLAG_AF1_ENTRY, /*goto*/ 0x06)
	goto_next(0x7e)
	label(0x06)
	camera_movement(ANIM_CUT_RIT_INTRO_CAM_02)
	cmd0175(60)
	if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
	chr_move_to_pad(CHR_COOP, PAD_RIT_008A, TRUE, /*goto*/ 0x2d)
	label(0x2d)
	if_controller_button_pressed(/*goto*/ 0x5f)
	set_chr_chrflag(CHR_BOND, CHRCFLAG_UNPLAYABLE)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_00020000)
	chr_do_animation(ANIM_CUT_RIT_INTRO_JO_01, -1, -1, CHRANIMFLAG_MOVEWHENINVIS | CHRANIMFLAG_PAUSEATEND, 0, CHR_BOND, 4)

	beginloop(0x09)
		if_camera_animating(/*goto*/ 0x2d)
		goto_next(0x5f)
		label(0x2d)
		if_controller_button_pressed(/*goto*/ 0x5f)
		label(0x2d)
	endloop(0x09)

	label(0x7e)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_DISGUISED)
	if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
	set_chr_hiddenflag(CHR_COOP, CHRHFLAG_DISGUISED)
	label(0x2d)
	dprint 'D','I','S','G','U','I','S','E','D','\n',0,
	camera_movement(ANIM_CUT_RIT_INTRO_CAM_03)
	cmd0175(60)
	if_chr_death_animation_finished(CHR_COOP, /*goto*/ 0x2d)
	chr_move_to_pad(CHR_COOP, PAD_RIT_00B2, TRUE, /*goto*/ 0x2d)
	label(0x2d)
	if_controller_button_pressed(/*goto*/ 0x5f)
	set_chr_chrflag(CHR_BOND, CHRCFLAG_UNPLAYABLE)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_00020000)
	chr_do_animation(ANIM_CUT_RIT_INTRO_JO_02, -1, -1, CHRANIMFLAG_MOVEWHENINVIS | CHRANIMFLAG_PAUSEATEND, 0, CHR_BOND, 4)

	beginloop(0x0a)
		if_camera_animating(/*goto*/ 0x2d)
		goto_next(0x5f)
		label(0x2d)
		if_controller_button_pressed(/*goto*/ 0x5f)
		label(0x2d)
	endloop(0x0a)

	label(0x5f)
	mute_channel(CHANNEL_7)
	unset_chr_chrflag(CHR_COOP, CHRCFLAG_HIDDEN)
	unset_chr_chrflag(CHR_ANTI, CHRCFLAG_HIDDEN)
	unset_chr_chrflag(CHR_BOND, CHRCFLAG_UNPLAYABLE)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_00020000)
	if_savefile_flag_is_set(GAMEFILEFLAG_AF1_ENTRY, /*goto*/ 0x06)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_TRIGGER_BUDDY_WARP)
	chr_do_animation(ANIM_CUT_RIT_INTRO_JO_02, -2, -1, CHRANIMFLAG_MOVEWHENINVIS | CHRANIMFLAG_PAUSEATEND, 0, CHR_BOND, 2)
	goto_next(0x2d)
	label(0x06)
	chr_do_animation(ANIM_CUT_RIT_INTRO_JO_01, -2, -1, CHRANIMFLAG_MOVEWHENINVIS | CHRANIMFLAG_PAUSEATEND, 0, CHR_BOND, 2)
	label(0x2d)
	stop_cutscene_track
	stop_ambient_track
	unset_chr_chrflag(0x13, CHRCFLAG_HIDDEN)
	unset_chr_chrflag(0x14, CHRCFLAG_HIDDEN)
	set_ailist(CHR_PRESIDENT, AILIST_INIT_PRESIDENT)
	set_ailist(0x09, AILIST_INIT_NEUTRAL)
	set_ailist(0x0a, AILIST_INIT_NEUTRAL)
	set_ailist(0x0c, AILIST_INIT_NEUTRAL)
	set_ailist(0x0d, AILIST_INIT_NEUTRAL)
	remove_chr(0x30)
	remove_chr(0x31)
	unset_chr_chrflag(0x30, CHRCFLAG_UNPLAYABLE)
	unset_chr_chrflag(0x31, CHRCFLAG_UNPLAYABLE)
	unset_chr_chrflag(CHR_PRESIDENT, CHRCFLAG_UNPLAYABLE)
	set_stage_flag(STAGEFLAG_INTRO_FINISHED)
	enter_firstperson
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

/**
 * The dumbwaiter near the middle of the plane.
 */
u8 func1010_dumbwaiter1[] = {
	label(0x03)
	set_object_flag(OBJ_DUMBWAITER1, OBJFLAG_DEACTIVATED)
	set_object_image(OBJ_DUMBWAITER1_SWITCH, 0, TVCMDLIST_12)

	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		if_chr_activated_object(CHR_P1P2, OBJ_DUMBWAITER1_SWITCH, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	play_sound(SFX_043A, CHANNEL_7)
	set_object_image(OBJ_DUMBWAITER1_SWITCH, 0, TVCMDLIST_13)
	unset_object_flag(OBJ_DUMBWAITER1, OBJFLAG_DEACTIVATED)
	yield
	yield
	yield

	beginloop(0x08)
		if_lift_stationary(OBJ_DUMBWAITER1, /*goto*/ 0x06)
	endloop(0x08)

	label(0x06)
	set_object_flag(OBJ_DUMBWAITER1, OBJFLAG_DEACTIVATED)
	restart_timer

	beginloop(0x09)
		if_timer_gt(180, /*goto*/ 0x2d)
	endloop(0x09)

	label(0x2d)
	unset_object_flag(OBJ_DUMBWAITER1, OBJFLAG_DEACTIVATED)
	yield
	yield
	yield

	beginloop(0x0a)
		if_lift_stationary(OBJ_DUMBWAITER1, /*goto*/ 0x06)
		goto_next(0x2d)

		label(0x06)
	endloop(0x0a)

	label(0x2d)
	yield
	yield
	yield

	beginloop(0x0b)
		if_lift_stationary(OBJ_DUMBWAITER1, /*goto*/ 0x06)
	endloop(0x0b)

	label(0x06)
#if VERSION >= VERSION_NTSC_1_0
	open_door(0x2b)
#endif
	if_chr_activated_object(CHR_P1P2, OBJ_DUMBWAITER1_SWITCH, /*goto*/ 0x2d)
	label(0x2d)
	goto_first(0x03)

	endlist
};

u8 func1011_dumbwaiter2[] = {
	label(0x03)
	set_object_flag(OBJ_DUMBWAITER2, OBJFLAG_DEACTIVATED)
	set_object_image(OBJ_DUMBWAITER2_SWITCH, 0, TVCMDLIST_12)

	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		if_chr_activated_object(CHR_P1P2, OBJ_DUMBWAITER2_SWITCH, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	play_sound(SFX_043A, CHANNEL_7)
	set_object_image(OBJ_DUMBWAITER2_SWITCH, 0, TVCMDLIST_13)
	unset_object_flag(OBJ_DUMBWAITER2, OBJFLAG_DEACTIVATED)
	yield
	yield
	yield

	beginloop(0x08)
		if_lift_stationary(OBJ_DUMBWAITER2, /*goto*/ 0x06)
	endloop(0x08)

	label(0x06)
	set_object_flag(OBJ_DUMBWAITER2, OBJFLAG_DEACTIVATED)
	restart_timer

	beginloop(0x09)
		if_timer_gt(180, /*goto*/ 0x2d)
	endloop(0x09)

	label(0x2d)
	unset_object_flag(OBJ_DUMBWAITER2, OBJFLAG_DEACTIVATED)
	yield
	yield
	yield

	beginloop(0x0a)
		if_lift_stationary(OBJ_DUMBWAITER2, /*goto*/ 0x06)
	endloop(0x0a)

	label(0x06)
	// @bug: Wrong object, but this is a no-op anyway.
	if_chr_activated_object(CHR_P1P2, OBJ_DUMBWAITER1_SWITCH, /*goto*/ 0x2d)
	label(0x2d)
	goto_first(0x03)

	endlist
};

u8 func040a_defend_pad[] = {
	set_shotlist(AILIST_DEFEND_PAD)
	set_returnlist(CHR_SELF, AILIST_DEFEND_PAD)
	if_chr_death_animation_finished(CHR_SELF, /*goto*/ 0x2d)
	if_chr_dead(CHR_SELF, /*goto*/ 0x2d)
	if_chr_knockedout(CHR_SELF, /*goto*/ 0x2d)
	goto_next(0x06)

	// Dying
	label(0x2d)
	set_shotlist(GAILIST_IDLE)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Alive
	label(0x06)
	if_just_injured(CHR_SELF, /*goto*/ 0x2d)
	goto_next(0x06)

	// Injured
	label(0x2d)

	beginloop(0x0a)
		if_chr_stopped(/*goto*/ 0x06)
	endloop(0x0a)

	// Not injured
	label(0x06)
	if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
	if_chr_distance_to_pad_lt(CHR_SELF, 200, PAD_PRESET, /*goto*/ 0x06)

	label(0x03)
	jog_to_pad(PAD_PRESET)

	beginloop(0x04)
		dprint 'G','O',' ','T','O',' ','P','A','D','\n',0,
		if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
		if_chr_distance_to_pad_lt(CHR_SELF, 200, PAD_PRESET, /*goto*/ 0x06)
	endloop(0x04)

	label(0x06)
	stop_chr

	beginloop(0x09)
		dprint 'A','T',' ','P','A','D','\n',0,
		if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
		if_chr_distance_to_pad_gt(CHR_SELF, 300, PAD_PRESET, /*goto*/ 0x06)
	endloop(0x09)

	label(0x06)
	goto_first(0x03)

	// Detected enemy
	label(0x08)
	dprint 'D','E','T','E','C','T','E','D','\n',0,
	set_returnlist(CHR_SELF, AILIST_DEFEND_PAD)
	set_shotlist(AILIST_DEFEND_PAD)
	set_ailist(CHR_SELF, GAILIST_COMBAT_WITH_TARGET)
	endlist
};

/**
 * Unused, but would have been assigned to a cyclone guard.
 */
u8 func040b_defend_president[] = {
	set_shotlist(AILIST_DEFEND_PRESIDENT)
	if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
	if_distance_to_chr_lt(200, CHR_PRESIDENT, /*goto*/ 0x06)

	label(0x03)
	try_jog_to_chr(CHR_PRESIDENT, /*goto*/ 0x04)

	beginloop(0x04)
		dprint 'G','O',' ','T','O',' ','P','A','D','\n',0,
		if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
		if_los_to_chr(CHR_PRESIDENT, /*goto*/ 0x60)
	endloop(0x04)

	// Near president
	label(0x60)
	if_distance_to_chr_lt(200, CHR_PRESIDENT, /*goto*/ 0x06)
	goto_first(0x04)

	label(0x06)
	stop_chr

	beginloop(0x09)
		dprint 'A','T',' ','P','A','D','\n',0,
		if_enemy_distance_lt_and_los(2540, /*goto*/ 0x08)
		if_los_to_chr(CHR_PRESIDENT, /*goto*/ 0x60)
		goto_first(0x04)

		label(0x60)
		if_distance_to_chr_gt(300, CHR_PRESIDENT, /*goto*/ 0x06)
	endloop(0x09)

	label(0x06)
	goto_first(0x03)

	// Detected enemy
	label(0x08)
	dprint 'D','E','T','E','C','T','E','D','\n',0,
	set_returnlist(CHR_SELF, AILIST_DEFEND_PRESIDENT)
	set_shotlist(AILIST_DEFEND_PRESIDENT)
	set_ailist(CHR_SELF, GAILIST_COMBAT_WITH_TARGET)
	endlist
};

u8 func0415_cloner1[] = {
	set_self_chrflag(CHRCFLAG_CLONEABLE)
	set_self_chrflag(CHRCFLAG_HIDDEN)
	set_self_chrflag(CHRCFLAG_NEVERSLEEP)

	beginloop(0x03)
		if_stage_flag_eq(STAGEFLAG_PRESIDENT_STARTED_RUNNING, TRUE, /*goto*/ 0x06)
		reloop(0x03)

		label(0x06)
		if_stage_flag_eq(STAGEFLAG_PRESIDENT_AT_POD, TRUE, /*goto*/ 0x06)
	endloop(0x03)

	label(0x06)

	set_chr_team(CHR_SELF, TEAM_04)
	try_equip_weapon(MODEL_CHRAVENGER, WEAPON_K7AVENGER, 0x10000000, /*goto*/ 0x04)

	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_UFO_ATTACHMENT_DAMAGED, TRUE, /*goto*/ 0x0e)
		// These rooms are the attachment area
		chr_toggle_p1p2(CHR_SELF)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0017, /*goto*/ 0x2d)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0018, /*goto*/ 0x2d)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0019, /*goto*/ 0x2d)
		if_never_been_onscreen(/*goto*/ 0x4f)
		if_los_to_target(/*goto*/ 0x08)
		label(0x2d)
		reloop(0x04)

		// Line of sight to player
		label(0x08)
		set_ailist(CHR_SELF, AILIST_CLONE1)

		// Chr flag is unset
		label(0x4f)
		if_chr_death_animation_finished(CHR_CLONE, /*goto*/ 0x4f)
		reloop(0x04)

		// @bug? This may have intended to be a bank 1 check because the bank 1
		// flag is unset further below, and cloner3 uses bank 1.
		label(0x4f)
		if_self_flag_bankx_eq(CHRFLAG0_SQUADALERTANYDIST, TRUE, BANK_0, /*goto*/ 0x2d)
		restart_timer

		beginloop(0x0b)
			if_stage_flag_eq(STAGEFLAG_UFO_ATTACHMENT_DAMAGED, TRUE, /*goto*/ 0x0e)
			if_timer_gt(2400, /*goto*/ 0x2d)
		endloop(0x0b)

		// Player is in UFO area, or interval has passed
		label(0x2d)
		unset_self_flag_bankx(CHRFLAG1_NOIDLEANIMS, BANK_1)
		try_spawn_clone2(CHR_SELF, AILIST_INIT_CLONE1, 0, /*goto*/ 0x2d)
		label(0x2d)
		yield
	endloop(0x04)

	// UFO attachment damaged
	label(0x0e)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func0416_init_clone1[] = {
	set_chr_dodge_rating(2, 0)
	set_accuracy(14)
	set_reaction_speed(50)
	set_chr_maxdamage(CHR_SELF, 60)
	add_health_or_armor(0)
	set_recovery_speed(30)
	set_shield(0)
	set_self_flag_bankx(CHRFLAG1_NOIDLEANIMS, BANK_1)
	try_equip_weapon(MODEL_CHRAVENGER, WEAPON_K7AVENGER, 0x10000000, /*goto*/ 0x04)
	label(0x04)
	rebuild_teams
	rebuild_squadrons
	try_inherit_properties(0x35, /*goto*/ 0x06)
	label(0x06)
	set_ailist(CHR_SELF, AILIST_CLONE1)
	endlist
};

u8 func0417_clone1[] = {
	// Pad is at the cockpit door
	run_to_pad(PAD_RIT_0042)
	set_returnlist(CHR_SELF, AILIST_CLONE1)
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

u8 func0418_cloner2[] = {
	set_self_chrflag(CHRCFLAG_CLONEABLE)
	set_self_chrflag(CHRCFLAG_HIDDEN)
	set_self_chrflag(CHRCFLAG_NEVERSLEEP)

	beginloop(0x03)
		if_stage_flag_eq(STAGEFLAG_PRESIDENT_STARTED_RUNNING, TRUE, /*goto*/ 0x06)
		reloop(0x03)

		label(0x06)
		if_stage_flag_eq(STAGEFLAG_PRESIDENT_AT_POD, TRUE, /*goto*/ 0x06)
	endloop(0x03)

	label(0x06)

	set_chr_team(CHR_SELF, TEAM_04)
	try_equip_weapon(MODEL_CHRAVENGER, WEAPON_K7AVENGER, 0x10000000, /*goto*/ 0x04)
	yield
	yield
	yield
	yield
	yield

	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_UFO_ATTACHMENT_DAMAGED, TRUE, /*goto*/ 0x0e)
		// These rooms are the attachment area
		chr_toggle_p1p2(CHR_SELF)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0017, /*goto*/ 0x2d)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0018, /*goto*/ 0x2d)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0019, /*goto*/ 0x2d)
		if_never_been_onscreen(/*goto*/ 0x4f)
		if_los_to_target(/*goto*/ 0x08)
		label(0x2d)
		reloop(0x04)

		// Line of sight to player
		label(0x08)
		set_ailist(CHR_SELF, AILIST_CLONE2)

		// Chr flag is unset
		label(0x4f)
		if_chr_death_animation_finished(CHR_CLONE, /*goto*/ 0x4f)
		reloop(0x04)

		// @bug? This may have intended to be a bank 1 check because the bank 1
		// flag is unset further below, and cloner3 uses bank 1.
		label(0x4f)
		if_self_flag_bankx_eq(CHRFLAG0_SQUADALERTANYDIST, TRUE, BANK_0, /*goto*/ 0x2d)
		restart_timer

		beginloop(0x0b)
			if_stage_flag_eq(STAGEFLAG_UFO_ATTACHMENT_DAMAGED, TRUE, /*goto*/ 0x0e)
			if_timer_gt(3600, /*goto*/ 0x2d)
		endloop(0x0b)

		// Player is in UFO area, or interval has passed
		label(0x2d)
		unset_self_flag_bankx(CHRFLAG1_NOIDLEANIMS, BANK_1)
		try_spawn_clone2(CHR_SELF, AILIST_INIT_CLONE2, 0, /*goto*/ 0x2d)
		label(0x2d)
		yield
	endloop(0x04)

	// UFO attachment damaged
	label(0x0e)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func0419_init_clone2[] = {
	set_chr_dodge_rating(2, 0)
	set_accuracy(14)
	set_reaction_speed(50)
	set_chr_maxdamage(CHR_SELF, 60)
	add_health_or_armor(0)
	set_recovery_speed(30)
	set_shield(0)
	set_self_flag_bankx(CHRFLAG1_NOIDLEANIMS, BANK_1)
	try_equip_weapon(MODEL_CHRAVENGER, WEAPON_K7AVENGER, 0x10000000, /*goto*/ 0x04)
	label(0x04)
	rebuild_teams
	rebuild_squadrons
	try_inherit_properties(0x36, /*goto*/ 0x06)
	label(0x06)
	set_ailist(CHR_SELF, AILIST_CLONE2)
	endlist
};

u8 func041a_clone2[] = {
	// Pad is at back of the plane, top floor
	run_to_pad(PAD_RIT_005C)
	set_returnlist(CHR_SELF, AILIST_CLONE2)
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

/**
 * Unlike the other two cloners, this one does not stop once the president has
 * reached the escape pod.
 */
u8 func041b_cloner3[] = {
	set_self_chrflag(CHRCFLAG_CLONEABLE)
	set_self_chrflag(CHRCFLAG_HIDDEN)
	set_self_chrflag(CHRCFLAG_NEVERSLEEP)

	beginloop(0x03)
		if_stage_flag_eq(STAGEFLAG_PRESIDENT_STARTED_RUNNING, TRUE, /*goto*/ 0x06)
	endloop(0x03)

	label(0x06)
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	set_chr_team(CHR_SELF, TEAM_04)
	try_equip_weapon(MODEL_CHRAVENGER, WEAPON_K7AVENGER, 0x10000000, /*goto*/ 0x04)

	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_UFO_ATTACHMENT_DAMAGED, TRUE, /*goto*/ 0x0e)
		chr_toggle_p1p2(CHR_SELF)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0017, /*goto*/ 0x2d)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0018, /*goto*/ 0x2d)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0019, /*goto*/ 0x2d)
		if_never_been_onscreen(/*goto*/ 0x4f)
		if_los_to_target(/*goto*/ 0x08)
		label(0x2d)
		reloop(0x04)

		label(0x08)
		set_ailist(CHR_SELF, AILIST_CLONE3)
		label(0x4f)
		if_chr_death_animation_finished(CHR_CLONE, /*goto*/ 0x4f)
		reloop(0x04)

		label(0x4f)
		if_self_flag_bankx_eq(CHRFLAG1_NOIDLEANIMS, TRUE, BANK_1, /*goto*/ 0x2d)
		restart_timer

		beginloop(0x0b)
			if_stage_flag_eq(STAGEFLAG_UFO_ATTACHMENT_DAMAGED, TRUE, /*goto*/ 0x0e)
			if_timer_gt(3600, /*goto*/ 0x2d)
		endloop(0x0b)

		label(0x2d)
		unset_self_flag_bankx(CHRFLAG1_NOIDLEANIMS, BANK_1)
		try_spawn_clone2(CHR_SELF, AILIST_INIT_CLONE3, 0, /*goto*/ 0x2d)
		label(0x2d)
		yield
	endloop(0x04)

	label(0x0e)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func041c_init_clone3[] = {
	set_chr_dodge_rating(2, 0)
	set_accuracy(14)
	set_reaction_speed(50)
	set_chr_maxdamage(CHR_SELF, 60)
	add_health_or_armor(0)
	set_recovery_speed(30)
	set_shield(0)
	set_self_flag_bankx(CHRFLAG1_NOIDLEANIMS, BANK_1)
	try_equip_weapon(MODEL_CHRAVENGER, WEAPON_K7AVENGER, 0x10000000, /*goto*/ 0x04)
	label(0x04)
	rebuild_teams
	rebuild_squadrons
	try_inherit_properties(0x37, /*goto*/ 0x06)
	label(0x06)
	set_ailist(CHR_SELF, AILIST_CLONE3)
	endlist
};

u8 func041d_clone3[] = {
	set_target_chr(CHR_BOND)
	try_run_to_target(/*goto*/ 0x04)
	label(0x04)
	yield
	set_returnlist(CHR_SELF, AILIST_CLONE3)
	set_ailist(CHR_SELF, GAILIST_ALERTED)
	endlist
};

u8 func041f_init_blonde[] = {
	set_chr_team(CHR_SELF, TEAM_04)
	rebuild_teams
	rebuild_squadrons
	set_chr_dodge_rating(2, 0)
	set_accuracy(24)
	set_reaction_speed(50)
	set_chr_maxdamage(CHR_SELF, 60)
	add_health_or_armor(100)
	set_recovery_speed(100)
	set_shield(0)
	set_ailist(CHR_SELF, AILIST_BLONDE)
	endlist
};

u8 func041e_blonde[] = {
	set_chr_team(CHR_SELF, TEAM_04)
	rebuild_teams
	rebuild_squadrons
	set_accuracy(30)
	set_shotlist(AILIST_BLONDE)
	if_chr_dead(CHR_SELF, /*goto*/ 0x06)
	if_chr_death_animation_finished(CHR_SELF, /*goto*/ 0x06)
	if_chr_knockedout(CHR_SELF, /*goto*/ 0x06)
	goto_next(0x2d)

	// Dying
	label(0x06)
	set_shotlist(GAILIST_IDLE)
	restart_timer

	beginloop(0x54)
		if_timer_gt(15, /*goto*/ 0x06)
	endloop(0x54)

	label(0x06)
	say_quip(CHR_BOND, QUIP_DIE, 0xff, 0x03, 0xff, BANK_0, 0x00, 0x00)
	set_shotlist(GAILIST_IDLE)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Alive
	// This injured check is pointless
	label(0x2d)
	if_just_injured(CHR_SELF, /*goto*/ 0x06)
	goto_next(0x08)

	label(0x06)
	label(0x08)
	set_self_chrflag(CHRCFLAG_NOFRIENDLYFIRE)
	label(0x68)
	if_self_flag_bankx_eq(CHRFLAG0_SKIPSAFETYCHECKS, TRUE, BANK_0, /*goto*/ 0x06)
	try_attack_kneel(ATTACKFLAG_AIMATTARGET | ATTACKFLAG_AIMONLY, 0, /*goto*/ 0x75)
	label(0x06)
	kneel

	beginloop(0x75)
		label(0x2d)
		chr_toggle_p1p2(CHR_P1P2)
		set_target_chr(CHR_BOND)
		if_can_see_target(/*goto*/ 0x6a)
		if_near_miss(/*goto*/ 0x6b)
		label(0x2d)
		reloop(0x75)

		label(0x06)
		if_can_see_target(/*goto*/ 0x6a)
		label(0x2d)
	endloop(0x75)

	label(0x6a)
	if_self_flag_bankx_eq(CHRFLAG0_GP1, TRUE, BANK_0, /*goto*/ 0x2d)
	set_self_flag_bankx(CHRFLAG0_GP1, BANK_0)
	say_quip(CHR_BOND, QUIP_SEEPLAYER, 0xff, 0x02, 0xff, BANK_0, 0x00, 0x00)
	label(0x2d)
	goto_next(0x6c)

	// Unreachable
	try_modify_attack(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x6d)
	goto_next(0x6e)

	// Reachable from below
	beginloop(0x6d)
		if_chr_stopped(/*goto*/ 0x6e)
	endloop(0x6d)

	label(0x6e)
	restart_timer
	chr_do_animation(ANIM_RELOAD_0209, 0, -1, CHRANIMFLAG_SLOWUPDATE, 16, CHR_SELF, 2)

	beginloop(0x66)
		if_self_flag_bankx_eq(CHRFLAG1_CAN_RELOAD, FALSE, BANK_1, /*goto*/ 0x06)
		if_timer_lt(120, /*goto*/ 0x06)
		assign_sound(VERSION >= VERSION_NTSC_1_0 ? SFX_80F6 : SFX_01D9, CHANNEL_7)
		play_sound_from_entity(CHANNEL_7, CHR_SELF, 0x0bb8, 0x1770, 0x01)
		unset_self_flag_bankx(CHRFLAG1_CAN_RELOAD, BANK_1)
		label(0x06)
		if_chr_stopped(/*goto*/ 0x2d)
	endloop(0x66)

	label(0x2d)
	label(0x06)
	goto_first(0x68)

	label(0x6b)
	restart_timer
	if_self_flag_bankx_eq(CHRFLAG0_GP1, TRUE, BANK_0, /*goto*/ 0x6f)
	set_self_flag_bankx(CHRFLAG0_GP1, BANK_0)

	label(0x6f)
	call_rng
	if_can_see_target(/*goto*/ 0x70)
	if_timer_gt(60, /*goto*/ 0x71)
	if_rand_lt(4, /*goto*/ 0x71)
	goto_first(0x6f)

	label(0x71)
	if_los_to_target(/*goto*/ 0x70)
	goto_first(0x68)

	label(0x70)
	goto_first(0x6a)

	label(0x72)
	restart_timer

	beginloop(0x73)
		if_los_to_target(/*goto*/ 0x70)
		if_timer_gt(300, /*goto*/ 0x06)
	endloop(0x73)

	label(0x06)
	goto_first(0x68)

	label(0x70)
	goto_first(0x6a)

	label(0x6c)
	say_quip(CHR_BOND, QUIP_ATTACK1, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
	try_modify_attack(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x06)
	label(0x06)
	goto_first(0x6d)

	label(0x2d)
	goto_first(0x6e)

	label(0x76)
	try_attack_stand(ATTACKFLAG_AIMATTARGET | ATTACKFLAG_AIMONLY, 0, /*goto*/ 0x74)
	label(0x74)
	say_quip(CHR_BOND, QUIP_ATTACK1, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
	try_modify_attack(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x06)
	goto_next(0x2d)
	label(0x06)
	goto_first(0x6d)

	label(0x2d)
	goto_first(0x6e)

	endlist
};

u8 func0421_trent_waiting[] = {
	set_chr_team(CHR_SELF, TEAM_04)
	rebuild_teams
	rebuild_squadrons
	set_self_chrflag(CHRCFLAG_NOFRIENDLYFIRE)
	set_shield(500)
	set_chr_chrflag(CHR_TRENT, CHRCFLAG_INVINCIBLE)

	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		set_target_chr(CHR_P1P2)
		if_los_to_target(/*goto*/ 0x06)
	endloop(0x04)

	label(0x06)
	restart_timer
	speak(CHR_TARGET, L_RIT_045, SFX_816F, CHANNEL_6, COLOR_05_GREEN) // "How the hell did you get on board?"
	chr_do_animation(ANIM_TALKING_0231, 0, -1, CHRANIMFLAG_SLOWUPDATE, 16, CHR_SELF, 2)

	beginloop(0x08)
		if_timer_gt(120, /*goto*/ 0x06)
	endloop(0x08)

	label(0x06)
	set_ailist(CHR_SELF, AILIST_TRENT_ATTACKING)
	endlist
};

u8 func0420_trent_attacking[] = {
	label(0x03)
	stop_chr

	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		set_target_chr(CHR_P1P2)
		if_chr_shield_damaged(CHR_SELF, /*goto*/ 0x2d)
		set_target_chr(CHR_PRESIDENT)
		if_can_see_target(/*goto*/ 0x06)
		if_stage_flag_eq(STAGEFLAG_ONE_BLONDE_DEAD, TRUE, /*goto*/ 0x2d)
	endloop(0x04)

	// One Blonde dead or player in sight
	label(0x2d)
	set_shield(500)
	set_chr_hiddenflag(CHR_SELF, CHRHFLAG_INFINITESHIELD)
	speak(CHR_P1P2, L_RIT_070, MP3_02CB, CHANNEL_6, COLOR_05_GREEN) // "Ha, Ha, Ha, Ha, Ha."
	set_ailist(CHR_SELF, AILIST_TRENT_RUNNING)

	// President in sight
	label(0x06)
	label(0x76)
	try_attack_stand(ATTACKFLAG_AIMATTARGET | ATTACKFLAG_AIMONLY, 0, /*goto*/ 0x74)
	label(0x74)
	say_quip(CHR_BOND, QUIP_ATTACK1, 0x19, 0x02, 0x01, BANK_0, 0x00, 0x00)
	try_modify_attack(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x08)
	goto_next(0x2d)

	beginloop(0x08)
		if_chr_stopped(/*goto*/ 0x06)
	endloop(0x08)

	label(0x06)
	if_chr_dead(CHR_TARGET, /*goto*/ 0x09)
	if_chr_death_animation_finished(CHR_TARGET, /*goto*/ 0x09)
	if_chr_knockedout(CHR_TARGET, /*goto*/ 0x09)
	goto_first(0x03)

	label(0x2d)
	goto_first(0x03)

	label(0x09)
	restart_timer
	chr_do_animation(ANIM_TALKING_0231, 0, -1, CHRANIMFLAG_SLOWUPDATE, 16, CHR_SELF, 2)
	speak(CHR_P1P2, L_RIT_071, MP3_02CA, CHANNEL_6, COLOR_05_GREEN) // "You'll never save him now."

	beginloop(0x0a)
		if_timer_gt(120, /*goto*/ 0x06)
	endloop(0x0a)

	label(0x06)
	set_ailist(CHR_SELF, AILIST_TRENT_RUNNING)
	endlist
};

u8 func0422_trent_running[] = {
	run_to_pad(PAD_RIT_0034)

	beginloop(0x08)
		if_chr_stopped(/*goto*/ 0x06)
	endloop(0x08)

	label(0x06)
	set_target_chr(CHR_BOND)
	if_los_to_target(/*goto*/ 0x06)
	set_target_chr(CHR_COOP)
	if_los_to_target(/*goto*/ 0x06)
	set_self_chrflag(CHRCFLAG_HIDDEN)
	remove_chr(CHR_SELF)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	label(0x06)
	set_alertness(100)
	set_returnlist(CHR_SELF, GAILIST_UNALERTED)
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

u8 func1012_check_blondes_dead[] = {
	beginloop(0x04)
		if_chr_dead(CHR_BLONDE1, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_BLONDE1, /*goto*/ 0x2d)
		if_chr_knockedout(CHR_BLONDE1, /*goto*/ 0x2d)

		if_chr_dead(CHR_BLONDE2, /*goto*/ 0x06)
		if_chr_death_animation_finished(CHR_BLONDE2, /*goto*/ 0x06)
		if_chr_knockedout(CHR_BLONDE2, /*goto*/ 0x06)
		reloop(0x04)

		// Blonde 2 dead
		label(0x06)
		set_stage_flag(STAGEFLAG_ONE_BLONDE_DEAD)
		reloop(0x04)

		// Blonde 1 dead
		label(0x2d)
		set_stage_flag(STAGEFLAG_ONE_BLONDE_DEAD)
		if_chr_dead(CHR_BLONDE2, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_BLONDE2, /*goto*/ 0x2d)
		if_chr_knockedout(CHR_BLONDE2, /*goto*/ 0x2d)
	endloop(0x04)

	// Both blondes dead
	label(0x2d)
	set_stage_flag(STAGEFLAG_BOTH_BLONDES_DEAD)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1013_unhide_trent_and_blondes[] = {
	yield
	disable_chr(CHR_TRENT)
	disable_chr(CHR_BLONDE1)
	disable_chr(CHR_BLONDE2)

	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		if_stage_flag_eq(STAGEFLAG_PRESIDENT_STARTED_RUNNING, TRUE, /*goto*/ 0x2d)
		reloop(0x04)

		label(0x2d)
		if_chr_y(CHR_P1P2, 190, OPERATOR_LESS_THAN, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	enable_chr(CHR_TRENT)
	set_ailist(CHR_TRENT, AILIST_TRENT_WAITING)
	enable_chr(CHR_BLONDE1)
	set_ailist(CHR_BLONDE1, AILIST_INIT_BLONDE)
	enable_chr(CHR_BLONDE2)
	set_ailist(CHR_BLONDE2, AILIST_INIT_BLONDE)
	yield
	unset_chr_chrflag(CHR_TRENT, CHRCFLAG_HIDDEN)
	unset_chr_chrflag(CHR_BLONDE1, CHRCFLAG_HIDDEN)
	unset_chr_chrflag(CHR_BLONDE2, CHRCFLAG_HIDDEN)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

/**
 * Assigned to basically everyone during president conversation.
 */
u8 func0429_be_unalert[] = {
	set_shotlist(GAILIST_ALERTED)
	set_target_chr(CHR_BOND)
	set_alertness(0)

	label(0x03)
	try_attack_stand(ATTACKFLAG_AIMATTARGET | ATTACKFLAG_AIMONLY, 0, /*goto*/ 0x04)

	beginloop(0x04)
		if_chr_stopped(/*goto*/ 0x06)
		if_chr_dead(CHR_PRESIDENT, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_PRESIDENT, /*goto*/ 0x2d)
		if_chr_knockedout(CHR_PRESIDENT, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x06)
	goto_first(0x03)

	label(0x2d)
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

/**
 * Would have given the player one minute before the diguise was uncovered.
 * The set_ailist at the start has effectively disabled this function.
 */
u8 func1014_uncover_disguise[] = {
	set_ailist(CHR_SELF, GAILIST_IDLE)
	restart_timer

	beginloop(0x04)
		if_timer_gt(3600, /*goto*/ 0x06)
	endloop(0x04)

	label(0x06)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_DISGUISE_UNCOVERED)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

/**
 * Assigned to presidential security as well as the two mechanics.
 */
u8 func042a_init_neutral[] = {
	yield

	beginloop(0x60)
		if_camera_animating(/*goto*/ 0x77)
		goto_next(0x06)

		label(0x77)
	endloop(0x60)

	label(0x06)
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	set_chr_dodge_rating(2, 0)
	set_accuracy(14)
	set_reaction_speed(70)
	set_chr_maxdamage(CHR_SELF, 40)
	add_health_or_armor(0)
	set_recovery_speed(0)
	set_shield(0)
	rebuild_teams
	rebuild_squadrons
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

u8 func042b_reinit_stripes[] = {
	set_chr_dodge_rating(2, 0)
	set_accuracy(14)
	set_reaction_speed(50)
	set_chr_maxdamage(CHR_SELF, 60)
	add_health_or_armor(0)
	set_recovery_speed(30)
	set_shield(0)
	set_chr_team(CHR_SELF, TEAM_04)
	rebuild_teams
	rebuild_squadrons
	set_ailist(CHR_SELF, AILIST_STRIPES)
	endlist
};

u8 func0407_steward[] = {
	set_shotlist(AILIST_STEWARD_SHOT)

	beginloop(0x03)
		chr_toggle_p1p2(CHR_SELF)
		set_target_chr(CHR_P1P2)
		if_chr_idle(/*goto*/ 0x2d)
		call_rng
		if_rand_lt(32, /*goto*/ 0x0f)
		call_rng
		if_rand_lt(32, /*goto*/ 0x8a)
		if_rand_lt(64, /*goto*/ 0x8b)
		if_rand_lt(96, /*goto*/ 0x8c)
		if_rand_lt(128, /*goto*/ 0x8d)
		if_rand_lt(160, /*goto*/ 0x8e)
		if_rand_lt(192, /*goto*/ 0x8f)
		if_rand_lt(224, /*goto*/ 0x90)

		chr_do_animation(ANIM_OPERATE_0221, -1, -1, CHRANIMFLAG_SLOWUPDATE, 1, CHR_SELF, 2)
		goto_next(0x2d)

		label(0x8a)
		chr_do_animation(ANIM_OPERATE_0221, -1, -1, CHRANIMFLAG_SLOWUPDATE, 1, CHR_SELF, 2)
		goto_next(0x2d)

		label(0x8b)
		chr_do_animation(ANIM_OPERATE_0223, -1, -1, CHRANIMFLAG_SLOWUPDATE, 1, CHR_SELF, 2)
		goto_next(0x2d)

		label(0x8c)
		chr_do_animation(ANIM_OPERATE_0221, -1, -1, CHRANIMFLAG_FLIP | CHRANIMFLAG_SLOWUPDATE, 1, CHR_SELF, 2)
		goto_next(0x2d)

		label(0x8d)
		chr_do_animation(ANIM_OPERATE_0221, -1, -1, CHRANIMFLAG_FLIP | CHRANIMFLAG_SLOWUPDATE, 1, CHR_SELF, 2)
		goto_next(0x2d)

		label(0x8e)
		chr_do_animation(ANIM_OPERATE_0223, -1, -1, CHRANIMFLAG_FLIP | CHRANIMFLAG_SLOWUPDATE, 1, CHR_SELF, 2)
		goto_next(0x2d)

		label(0x8f)
		chr_do_animation(ANIM_023A, -1, -1, CHRANIMFLAG_FLIP | CHRANIMFLAG_SLOWUPDATE, 1, CHR_SELF, 2)
		goto_next(0x2d)

		label(0x90)
		chr_do_animation(ANIM_HEAD_ROLL, -1, -1, CHRANIMFLAG_FLIP | CHRANIMFLAG_SLOWUPDATE, 1, CHR_SELF, 2)
		goto_next(0x2d)

		label(0x0f)
		call_rng
		if_rand_lt(86, /*goto*/ 0x60)
		if_rand_lt(172, /*goto*/ 0x77)

		if_chr_distance_to_pad_lt(CHR_SELF, 50, PAD_RIT_00C1, /*goto*/ 0x60)
		label(0x79)
		walk_to_pad(PAD_RIT_00C1)
		set_morale(1)
		set_padpreset(PAD_RIT_00C2)
		goto_next(0x87)

		label(0x60)
		if_chr_distance_to_pad_lt(CHR_SELF, 50, PAD_RIT_00C3, /*goto*/ 0x77)
		walk_to_pad(PAD_RIT_00C3)
		set_morale(2)
		set_padpreset(PAD_RIT_00C4)
		goto_next(0x87)

		label(0x77)
		if_chr_distance_to_pad_lt(CHR_SELF, 50, PAD_RIT_00C1, /*goto*/ 0x78)
		set_morale(3)
		set_padpreset(PAD_RIT_00C6)
		walk_to_pad(PAD_RIT_00C5)
		goto_next(0x87)

		label(0x78)
		goto_first(0x79)

		beginloop(0x87)
			chr_toggle_p1p2(CHR_SELF)
			set_target_chr(CHR_P1P2)
			if_can_see_target(/*goto*/ 0x89)
			if_saw_injury(0x00, /*goto*/ 0x89)
			if_chr_stopped(/*goto*/ 0x06)
		endloop(0x87)

		label(0x06)
		try_face_entity(ATTACKFLAG_AIMATPAD, PAD_PRESET, /*goto*/ 0x88)

		beginloop(0x88)
			if_chr_stopped(/*goto*/ 0x06)
		endloop(0x88)

		label(0x06)
		reloop(0x03)

		chr_do_animation(ANIM_OPERATE_0204, 0, -1, CHRANIMFLAG_SLOWUPDATE, 16, CHR_SELF, 2)
		label(0x2d)
		if_can_see_target(/*goto*/ 0x89)
		if_saw_injury(0x00, /*goto*/ 0x89)
	endloop(0x03)

	// Detected player
	label(0x89)
	set_alertness(100)
	restart_timer
	try_face_entity(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x09)

	beginloop(0x09)
		if_target_in_fov_left(10, /*goto*/ 0x06)
		if_timer_gt(60, /*goto*/ 0x06)
	endloop(0x09)

	label(0x06)
	increase_squadron_alertness(100)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_DISGUISE_UNCOVERED)
	do_preset_animation(PRESETANIM_TALKRANDOM)
	restart_timer
	speak(CHR_P1P2, L_RIT_043, MP3_02BB, CHANNEL_4, COLOR_04_ORANGE) // "Hey, that's not..."

	beginloop(0x08)
		if_timer_gt(35, /*goto*/ 0x2d)
	endloop(0x08)

	label(0x2d)
	mute_channel(CHANNEL_4)
	set_ailist(CHR_SELF, GAILIST_ALERTED)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func0425_steward_shot[] = {
	mute_channel(CHANNEL_4)
	set_ailist(CHR_SELF, GAILIST_ALERTED)
	endlist
};

u8 func0408_stewardess[] = {
	set_chr_maxdamage(CHR_SELF, 0)
	set_shotlist(AILIST_STEWARDESS)
	if_chr_dead(CHR_SELF, /*goto*/ 0x06)
	if_chr_death_animation_finished(CHR_SELF, /*goto*/ 0x06)
	if_chr_knockedout(CHR_SELF, /*goto*/ 0x06)
	goto_next(0x03)

	label(0x06)
	set_ailist(CHR_SELF, GAILIST_IDLE)

	// Wait until alerted
	beginloop(0x03)
		if_chr_idle(/*goto*/ 0x2d)
		chr_do_animation(ANIM_OPERATE_0204, 0, -1, CHRANIMFLAG_SLOWUPDATE, 16, CHR_SELF, 2)
		label(0x2d)
		if_alertness(99, OPERATOR_GREATER_THAN, /*goto*/ 0x2d)
		if_saw_injury(0x00, /*goto*/ 0x2d)
		if_chr_dead(CHR_STEWARD, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_STEWARD, /*goto*/ 0x2d)
		if_chr_knockedout(CHR_STEWARD, /*goto*/ 0x2d)
	endloop(0x03)

	// Alerted
	label(0x2d)
	try_face_entity(ATTACKFLAG_AIMATTARGET, 0, /*goto*/ 0x09)

	beginloop(0x09)
		if_target_in_fov_left(10, /*goto*/ 0x06)
		if_timer_gt(60, /*goto*/ 0x06)
	endloop(0x09)

	label(0x06)
	set_chr_hiddenflag(CHR_BOND, CHRHFLAG_DISGUISE_UNCOVERED)
	chr_do_animation(ANIM_WALK_BACKWARDS, -1, -1, CHRANIMFLAG_SLOWUPDATE, 16, CHR_SELF, 2)
	restart_timer

	beginloop(0x08)
		if_timer_gt(120, /*goto*/ 0x06)
	endloop(0x08)

	label(0x06)
	try_set_chrpreset_to_unalerted_teammate(0, /*goto*/ 0x2d)
	goto_next(0x0a)

	label(0x2d)
	try_run_to_chr(CHR_PRESET, /*goto*/ 0x7f)

	beginloop(0x7f)
		if_los_to_chr(CHR_PRESET, /*goto*/ 0x80)
		if_chr_stopped(/*goto*/ 0x80)
	endloop(0x7f)

	label(0x80)
	play_sound(MP3_02DC, CHANNEL_7)
	increase_squadron_alertness(100)

	label(0x0a)
	set_self_chrflag(CHRCFLAG_PUSHABLE)
	chr_do_animation(ANIM_COWER_0229, -1, 190, CHRANIMFLAG_SLOWUPDATE, 10, CHR_SELF, 2)

	beginloop(0x83)
		if_chr_stopped(/*goto*/ 0x2d)
	endloop(0x83)

	label(0x2d)
	goto_first(0x0a)

	endlist
};

u8 func1015_msg_retrievetheevidence[] = {
	if_difficulty_lt(DIFF_SA, /*goto*/ 0x0e)

	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_INTRO_FINISHED, TRUE, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	restart_timer

	beginloop(0x08)
		if_timer_gt(180, /*goto*/ 0x2d)
	endloop(0x08)

	label(0x2d)
	speak(CHR_BOND, L_RIT_046, MP3_03C8, CHANNEL_6, COLOR_09_BLUE) // "Now, let's retrieve the evidence."
	label(0x0e)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1016_msg_onthislevel[] = {
	restart_timer

	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		if_chr_y(CHR_P1P2, 440, OPERATOR_LESS_THAN, /*goto*/ 0x06)
		goto_next(0x2d)

		label(0x06)
	endloop(0x04)

	label(0x2d)
	set_target_chr(CHR_PRESET)
	speak(CHR_TARGET, L_RIT_047, SFX_8185, CHANNEL_6, COLOR_09_BLUE) // "The President's room is on this level, Joanna."
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1017_msg_gettothecockpit[] = {
	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_ALL_OBJECTIVES_COMPLETE, TRUE, /*goto*/ 0x0e)
		if_stage_flag_eq(STAGEFLAG_PILOTS_DEAD, TRUE, /*goto*/ 0x2d)
		reloop(0x04)

		label(0x2d)
		if_stage_flag_eq(STAGEFLAG_PLANE_NOSEDIVING, TRUE, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	restart_timer

	beginloop(0x08)
		if_stage_flag_eq(STAGEFLAG_ALL_OBJECTIVES_COMPLETE, TRUE, /*goto*/ 0x0e)
		if_timer_gt(180, /*goto*/ 0x2d)
	endloop(0x08)

	label(0x2d)
	speak(CHR_BOND, L_RIT_048, SFX_8186, CHANNEL_5, COLOR_09_BLUE) // "Something's wrong... You have to get to the cockpi..."

	label(0x0e)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1018_msg_maybeamine[] = {
	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_ALL_OBJECTIVES_COMPLETE, TRUE, /*goto*/ 0x0e)
		chr_toggle_p1p2(CHR_SELF)
		if_objective_complete(2, /*goto*/ 0x2d)
		reloop(0x04)

		label(0x2d)
		if_chr_in_room(CHR_P1P2, 0x00, 0x0018, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	speak(CHR_P1P2, L_RIT_049, MP3_03CB, CHANNEL_6, COLOR_09_BLUE) // "Maybe a mine will detach the UFO."

	label(0x0e)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func0c02_outro_from_menu[] = {
	set_ailist(CHR_ELVIS, GAILIST_IDLE)
	set_ailist(CHR_SELF, AILIST_OUTRO)
	endlist
};

u8 func0423_outro[] = {
	configure_environment(0x0000, AIENVCMD_STOPNOSEDIVE, 0)
	if_chr_death_animation_finished(CHR_BOND, /*goto*/ 0x2d)
	set_target_chr(CHR_BOND)
	goto_next(0x06)
	label(0x2d)
	set_target_chr(CHR_COOP)
	label(0x06)
	camera_movement(ANIM_CUT_RIT_OUTRO_CAM)
	play_cutscene_track(MUSIC_AIRFORCEONE_OUTRO)
	configure_environment(0x0000, AIENVCMD_STOPNOSEDIVE, 0)
	set_chr_chrflag(CHR_ANTI, CHRCFLAG_HIDDEN)
	set_chr_chrflag(CHR_P1P2_OPPOSITE, CHRCFLAG_HIDDEN)
	set_chr_chrflag(CHR_P1P2, CHRCFLAG_HIDDEN)
	set_ailist(CHR_TARGET, GAILIST_IDLE)
	set_chr_chrflag(CHR_TARGET, CHRCFLAG_UNPLAYABLE)
	unset_chr_chrflag(CHR_TARGET, CHRCFLAG_HIDDEN)
	set_chr_hiddenflag(CHR_TARGET, CHRHFLAG_00020000)
	chr_do_animation(ANIM_CUT_RIT_OUTRO_JO, -1, -1, CHRANIMFLAG_MOVEWHENINVIS | CHRANIMFLAG_PAUSEATEND, 0, CHR_TARGET, 4)
	set_chr_hudpiece_visible(CHR_TARGET, TRUE)
	set_chr_chrflag(CHR_ELVIS, CHRCFLAG_UNPLAYABLE)
	unset_chr_chrflag(CHR_ELVIS, CHRCFLAG_HIDDEN)
	set_chr_hiddenflag(CHR_ELVIS, CHRHFLAG_00020000)
	chr_do_animation(ANIM_CUT_RIT_OUTRO_ELVIS, -1, -1, CHRANIMFLAG_MOVEWHENINVIS | CHRANIMFLAG_PAUSEATEND, 0, CHR_ELVIS, 4)
	enable_object(0x19)
	set_object_flag2(0x19, OBJFLAG2_CANFILLVIEWPORT)
	set_object_flag3(0x19, OBJFLAG3_00000010)
	object_do_animation(ANIM_CUT_RIT_OUTRO_SKSHUTTLE, 0x19, 0x04, 0xffff)
	enable_object(0x1a)
	set_object_flag2(0x1a, OBJFLAG2_CANFILLVIEWPORT)
	set_object_flag3(0x1a, OBJFLAG3_00000010)
	object_do_animation(ANIM_CUT_RIT_OUTRO_UFOEXTERIOR, 0x1a, 0x04, 0xffff)
	enable_object(0x23)
	set_object_flag2(0x23, OBJFLAG2_CANFILLVIEWPORT)
	set_object_flag3(0x23, OBJFLAG3_00000010)
	object_do_animation(ANIM_CUT_RIT_OUTRO_UFOINTERIOR, 0x23, 0x04, 0xffff)
	enable_object(0x37)
	set_object_flag2(0x37, OBJFLAG2_CANFILLVIEWPORT)
	set_object_flag3(0x37, OBJFLAG3_00000010)
	object_do_animation(ANIM_CUT_RIT_OUTRO_PLANE, 0x37, 0x04, 0xffff)
	restart_timer
	set_cutscene_weapon(CHR_TARGET, WEAPON_NONE, WEAPON_NONE)
	yield
	set_cutscene_weapon(CHR_TARGET, WEAPON_NONE, WEAPON_NONE)
	show_nonessential_chrs(FALSE)
	label(0x60)
	yield
	if_controller_button_pressed(/*goto*/ 0x5f)
	if_timer_gt(20, /*goto*/ 0x06)
	goto_first(0x60)

	label(0x06)
	speak(CHR_BOND, L_RIT_079, MP3_0452, CHANNEL_7, COLOR_09_BLUE) // "Elvis! Elvis! I can't detach that tube from the fu..."

	#define outro_wait_until(time, loopid) \
		beginloop(loopid) \
			if_controller_button_pressed(/*goto*/ 0x5f) \
			if_timer_gt(time, /*goto*/ 0x06) \
		endloop(loopid) \
		label(0x06)

	outro_wait_until(426, 0x77)
	speak(CHR_BOND, L_RIT_080, MP3_0453, CHANNEL_7, COLOR_06_WHITE) // "Piece of cake, Joanna. Watch this!"

	outro_wait_until(1045, 0x65)
	play_sound(SFX_0063, CHANNEL_CUTSCENE)

	outro_wait_until(1050, 0x78)
	speak(CHR_BOND, L_RIT_081, MP3_0454, CHANNEL_7, COLOR_06_WHITE) // "Uh-oh."
	emit_sparks(0x23)

	outro_wait_until(1112, 0x79)
	speak(CHR_BOND, L_RIT_082, MP3_0455, CHANNEL_7, COLOR_09_BLUE) // "Watch what? Will you stop playing around and shoot..."

	outro_wait_until(1380, 0x7a)
	speak(CHR_BOND, L_RIT_083, MP3_0456, CHANNEL_7, COLOR_06_WHITE) // "Out of options... Joanna, brace yourself for impac..."

	outro_wait_until(1950, 0x7b)

	outro_wait_until(1951, 0x62)
	destroy_object(0x1a)

	outro_wait_until(1958, 0x63)
	destroy_object(0x1a)

	outro_wait_until(1970, 0x64)
	destroy_object(0x1a)
	destroy_object(0x19)

	outro_wait_until(1985, 0x8e)
	destroy_object(0x1a)

	outro_wait_until(2000, 0x8a)
	destroy_object(0x1a)

	outro_wait_until(2015, 0x8b)
	destroy_object(0x1a)

	outro_wait_until(2030, 0x8c)
	destroy_object(0x1a)

	outro_wait_until(2045, 0x8d)
	destroy_object(0x1a)

	outro_wait_until(2060, 0x8f)
	destroy_object(0x1a)

	beginloop(0x08)
		if_camera_animating(/*goto*/ 0x2d)
		goto_next(0x5f)

		label(0x2d)
		if_controller_button_pressed(/*goto*/ 0x5f)
		label(0x2d)
	endloop(0x08)

	label(0x5f)
	mute_channel(CHANNEL_CUTSCENE)
	label(0x06)
	stop_cutscene_track
	configure_environment(0x0000, AIENVCMD_STOPNOSEDIVE, 0)
	disable_object(0x19)
	disable_object(0x1a)
	set_chr_hudpiece_visible(CHR_TARGET, FALSE)
	end_level
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1019_midcutscene[] = {
	beginloop(0x08)
		if_stage_flag_eq(STAGEFLAG_TRIGGER_MIDCUTSCENE, TRUE, /*goto*/ 0x2d)
	endloop(0x08)

	label(0x2d)
	set_chr_chrflag(CHR_COOP, CHRCFLAG_HIDDEN)
	set_chr_chrflag(CHR_ANTI, CHRCFLAG_HIDDEN)
	if_stage_flag_eq(STAGEFLAG_MIDCUTSCENE_STARTED, TRUE, /*goto*/ 0x2d)
	set_stage_flag(STAGEFLAG_MIDCUTSCENE_STARTED)
	dprint 'm','i','d',' ','c','u','t','s','c','e','n','e','\n',0,
	play_cutscene_track(MUSIC_AIRFORCEONE_MIDCUTSCENE)
	label(0x2d)
	camera_movement(ANIM_CUT_RIT_MID_CAM)

	enable_object(0x19)
	set_object_flag2(0x19, OBJFLAG2_CANFILLVIEWPORT)
	set_object_flag3(0x19, OBJFLAG3_00000010)
	object_do_animation(ANIM_CUT_RIT_MID_SKSHUTTLE, 0x19, 0x04, 0xffff)
	object_set_modelpart_visible(0x19, MODELPART_SKSHUTTLE_GANGWAY, TRUE)

	enable_object(0x37)
	set_object_flag2(0x37, OBJFLAG2_CANFILLVIEWPORT)
	set_object_flag3(0x37, OBJFLAG3_00000010)
	object_do_animation(ANIM_CUT_RIT_MID_PLANE, 0x37, 0x04, 0xffff)

	restart_timer

	outro_wait_until(1086, 0x61)
	play_sound(SFX_DOOR_042C, -1)

	beginloop(0x09)
		if_camera_animating(/*goto*/ 0x2d)
		goto_next(0x5f)

		label(0x2d)
		if_controller_button_pressed(/*goto*/ 0x5f)
		label(0x2d)
	endloop(0x09)

	label(0x5f)
	disable_object(0x37)
	disable_object(0x19)
	label(0x06)
	set_stage_flag(STAGEFLAG_MIDCUTSCENE_FINISHED)
	stop_cutscene_track
	stop_ambient_track
	unset_chr_chrflag(CHR_COOP, CHRCFLAG_HIDDEN)
	unset_chr_chrflag(CHR_ANTI, CHRCFLAG_HIDDEN)
	set_ailist(CHR_SELF, GAILIST_END_CINEMA)
	endlist
};

u8 func1019_midcutscene_from_menu[] = {
	set_stage_flag(STAGEFLAG_TRIGGER_MIDCUTSCENE)
	set_ailist(CHR_SELF, AILIST_MIDCUTSCENE)
	endlist
};

u8 func101a_equipment_switch[] = {
	set_object_flag(0x1b, OBJFLAG_DEACTIVATED)
	set_object_image(OBJ_EQUIPMENT_SWITCH, 0, TVCMDLIST_12)

	beginloop(0x04)
		chr_toggle_p1p2(CHR_SELF)
		if_chr_activated_object(CHR_P1P2, OBJ_EQUIPMENT_SWITCH, /*goto*/ 0x2d)
		reloop(0x04)

		label(0x2d)
		if_chr_has_object(CHR_P1P2, OBJ_KEYCARD, /*goto*/ 0x2d)

		restart_timer
		show_hudmsg(CHR_P1P2, L_RIT_063) // "Access denied - lift key card required."

		beginloop(0x77)
			if_timer_gt(120, /*goto*/ 0x06)
		endloop(0x77)

		label(0x06)
	endloop(0x04)

	// Switch activated with keycard
	label(0x2d)
	set_object_image(OBJ_EQUIPMENT_SWITCH, 0, TVCMDLIST_13)
	set_stage_flag(STAGEFLAG_EQUIPMENT_RAISED)
	open_door(0x1c)
	show_hudmsg(CHR_P1P2, L_RIT_061) // "Cargo bay has been raised."
	assign_sound(SFX_043A, CHANNEL_7)
	set_object_sound_playing(CHANNEL_7, OBJ_EQUIPMENT_SWITCH, TRUE)
	unset_object_flag(0x1b, OBJFLAG_DEACTIVATED)
	yield
	yield
	yield
	yield
	yield
	yield
	restart_timer

	beginloop(0x08)
		if_lift_stationary(0x1b, /*goto*/ 0x06)
	endloop(0x08)

	label(0x06)
	set_object_flag(0x1b, OBJFLAG_DEACTIVATED)
	set_object_image(OBJ_EQUIPMENT_SWITCH, 0, TVCMDLIST_12)

	beginloop(0x09)
		if_door_state(0x1c, DOORSTATE_CLOSING, /*goto*/ 0x2d)
		reloop(0x09)

		label(0x2d)
		open_door(0x1c)
	endloop(0x09)

	endlist
};

u8 func101b_hoverbike_switch[] = {
	unset_savefile_flag(GAMEFILEFLAG_CRASHSITE_BIKE)
	set_object_flag(0x1f, OBJFLAG_DEACTIVATED)
	set_object_image(OBJ_HOVERBIKE_SWITCH, 0, TVCMDLIST_12)
	label(0x08)
	open_door(0x20)

	beginloop(0x09)
		chr_toggle_p1p2(CHR_SELF)
		if_door_state(0x20, DOORSTATE_CLOSING, /*goto*/ 0x2d)
		if_chr_activated_object(CHR_P1P2, OBJ_HOVERBIKE_SWITCH, /*goto*/ 0x0a)
		reloop(0x09)

		label(0x2d)
		open_door(0x20)
		reloop(0x09)

		label(0x0a)
		if_chr_has_object(CHR_P1P2, OBJ_KEYCARD, /*goto*/ 0x2d)
		restart_timer
		show_hudmsg(CHR_P1P2, L_RIT_063) // "Access denied - lift key card required."

		beginloop(0x77)
			if_timer_gt(120, /*goto*/ 0x06)
		endloop(0x77)

		label(0x06)
	endloop(0x09)

	// Activated with keycard
	label(0x2d)
	set_object_image(OBJ_HOVERBIKE_SWITCH, 0, TVCMDLIST_13)
	show_hudmsg(CHR_P1P2, L_RIT_060) // "Cargo bay has been lowered."
	set_savefile_flag(GAMEFILEFLAG_CRASHSITE_BIKE)
	assign_sound(SFX_043A, CHANNEL_7)
	set_object_sound_playing(CHANNEL_7, OBJ_HOVERBIKE_SWITCH, TRUE)
	unset_object_flag(0x1f, OBJFLAG_DEACTIVATED)
	restart_timer

	beginloop(0x0c)
		if_timer_gt(2, /*goto*/ 0x2d)
	endloop(0x0c)

	label(0x2d)
	close_door(0x20)

	beginloop(0x0b)
		if_lift_stationary(0x1f, /*goto*/ 0x06)
	endloop(0x0b)

	label(0x06)
	set_object_flag(0x1f, OBJFLAG_DEACTIVATED)
	set_object_image(OBJ_HOVERBIKE_SWITCH, 0, TVCMDLIST_12)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func101c_check_equipment_switch_destroyed[] = {
	beginloop(0x04)
		if_object_in_good_condition(OBJ_EQUIPMENT_SWITCH, /*goto*/ 0x2d)
		goto_next(0x06)

		label(0x2d)
	endloop(0x04)

	label(0x06)
	if_stage_flag_eq(STAGEFLAG_EQUIPMENT_RAISED, TRUE, /*goto*/ 0x2d)
	set_stage_flag(STAGEFLAG_EQUIPMENT_SWITCH_DESTROYED)
	show_hudmsg(CHR_BOND, L_RIT_062) // "Mission critical object has been destroyed."
	label(0x2d)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func040c_init_defend_pad[] = {
	unset_chr_hiddenflag(CHR_SELF, CHRHFLAG_ANTINONINTERACTABLE)
	set_chr_team(CHR_SELF, TEAM_ALLY)
	rebuild_teams
	rebuild_squadrons
	set_target_chr(-1)
	label(0x04)
	try_equip_weapon(MODEL_CHRCYCLONE, WEAPON_CYCLONE, 0x00000000, /*goto*/ 0x2d)
	label(0x2d)
	set_ailist(CHR_SELF, AILIST_DEFEND_PAD)
	endlist
};

u8 func040e_unused[] = {
	label(0x04)
	try_equip_weapon(MODEL_CHRCYCLONE, WEAPON_CYCLONE, 0x00000000, /*goto*/ 0x2d)
	label(0x2d)
	set_ailist(CHR_SELF, GAILIST_UNALERTED)
	endlist
};

/**
 * Unused.
 */
u8 func040d_init_defend_president[] = {
	label(0x04)
	try_equip_weapon(MODEL_CHRCYCLONE, WEAPON_CYCLONE, 0x00000000, /*goto*/ 0x2d)
	label(0x2d)
	set_ailist(CHR_SELF, AILIST_DEFEND_PRESIDENT)
	endlist
};

#if VERSION < VERSION_NTSC_1_0
/**
 * This is unused in ntsc-beta, and deleted in newer versions.
 */
u8 unregistered_function2[] = {
	beginloop(0x04)
		// Wait until player is in the dumbwaiter shaft near the UFO attachment
		chr_toggle_p1p2(CHR_SELF)
		if_chr_in_room(CHR_P1P2, 0x00, 0x001a, /*goto*/ 0x06)
		reloop(0x04)

		label(0x06)
		if_lift_stationary(0x05, /*goto*/ 0x06)
		reloop(0x04)

		// Disable the lift and wait 2 seconds
		label(0x06)
		set_object_flag(0x05, OBJFLAG_DEACTIVATED)
		restart_timer

		beginloop(0x0e)
			if_timer_gt(120, /*goto*/ 0x06)
		endloop(0x0e)

		// Check that the player is still on the lift
		label(0x06)
		if_chr_in_room(CHR_P1P2, 0x00, 0x001a, /*goto*/ 0x06)
		reloop(0x04)

		label(0x06)
		if_lift_stationary(0x05, /*goto*/ 0x06)
		reloop(0x04)

		// Check that the door is closing
		label(0x06)
		if_door_state(0x2b, DOORSTATE_CLOSED | DOORSTATE_CLOSING, /*goto*/ 0x2d)
		reloop(0x04)

		// Start the lift
		label(0x2d)
		play_sound(SFX_043A, CHANNEL_7)
		unset_object_flag(0x05, OBJFLAG_DEACTIVATED)
		yield
		yield
		yield

		// Wait until lift has stopped, then disable it and wait 3 seconds
		beginloop(0x08)
			if_lift_stationary(0x05, /*goto*/ 0x06)
		endloop(0x08)

		label(0x06)
		set_object_flag(0x05, OBJFLAG_DEACTIVATED)
		restart_timer

		beginloop(0x09)
			if_timer_gt(180, /*goto*/ 0x2d)
		endloop(0x09)

		// Enable the lift again and wait for it to start moving
		// ...presumably without the player on it
		label(0x2d)
		unset_object_flag(0x05, OBJFLAG_DEACTIVATED)
		yield
		yield
		yield

		beginloop(0x0a)
			if_lift_stationary(0x05, /*goto*/ 0x06)
			goto_next(0x2d)

			label(0x06)
		endloop(0x0a)

		// Wait for the lift to arrive at its original position
		label(0x2d)
		yield
		yield
		yield

		beginloop(0x0b)
			if_lift_stationary(0x05, /*goto*/ 0x06)
		endloop(0x0b)

		label(0x06)
	endloop(0x04)

	endlist
};
#endif

u8 func042c_remove_if_offscreen[] = {
	unset_chr_hiddenflag(CHR_SELF, CHRHFLAG_ANTINONINTERACTABLE)
	set_chr_team(CHR_SELF, TEAM_ALLY)
	rebuild_teams
	rebuild_squadrons
	set_chr_maxdamage(CHR_SELF, 0)

	label(0x04)
	yield
	set_target_chr(CHR_BOND)
	if_los_to_target(/*goto*/ 0x06)
	set_target_chr(CHR_COOP)
	if_los_to_target(/*goto*/ 0x06)
	label(0x08)
	chr_drop_weapon(CHR_SELF)
	remove_chr(CHR_SELF)
	yield
	set_ailist(CHR_SELF, GAILIST_IDLE)

	label(0x06)
	set_ailist(CHR_SELF, AILIST_INIT_DEFEND_PAD)
	endlist
};

/**
 * If president dies between mid cutscene and Jo's "we have to get you to the
 * escape pod" line, set the flag that causes things to happen.
 *
 * This was most likely added after QA, hence why the original function wasn't
 * changed instead.
 */
u8 func101d_handle_early_president_death[] = {
	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_MIDCUTSCENE_FINISHED, TRUE, /*goto*/ 0x06)
	endloop(0x04)

	label(0x06)
	disable_object(OBJ_EXTERIOR_DOOR)
	unset_object_flag2(OBJ_EXTERIOR_DOOR_DETACHED, OBJFLAG2_INVISIBLE)
	set_object_flag(OBJ_EXTERIOR_DOOR_DETACHED, OBJFLAG_00000100)

	beginloop(0x08)
		if_chr_death_animation_finished(CHR_PRESIDENT, /*goto*/ 0x2d)
		if_chr_dead(CHR_PRESIDENT, /*goto*/ 0x2d)
		if_chr_knockedout(CHR_PRESIDENT, /*goto*/ 0x2d)
	endloop(0x08)

	label(0x2d)
	set_stage_flag(STAGEFLAG_PRESIDENT_STARTED_RUNNING)
	unlock_door(OBJ_COCKPITDOOR, 0x40)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1007_check_pod_destroyed[] = {
	beginloop(0x04)
		if_object_in_good_condition(OBJ_ESCAPE_POD, /*goto*/ 0x2d)
		show_hudmsg(CHR_BOND, L_RIT_062) // "Mission critical object has been destroyed."
		set_stage_flag(STAGEFLAG_POD_DESTROYED)
		set_ailist(CHR_SELF, GAILIST_IDLE)
		label(0x2d)
	endloop(0x04)

	endlist
};

u8 func101f_setup_rtracker[] = {
	yield
	set_object_flag3(0x38, OBJFLAG3_RTRACKED_BLUE)
	set_object_flag3(0x39, OBJFLAG3_RTRACKED_BLUE)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1420_setup_environment[] = {
	yield
	configure_environment(0x001a, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x001b, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x002b, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x002d, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x002e, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x002f, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0030, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0031, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0032, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0033, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0034, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0035, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0036, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0037, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0038, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0039, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x003b, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x003c, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x003e, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x003f, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0040, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0041, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0042, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0043, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	configure_environment(0x0059, AIENVCMD_ROOM_SETAMBIENT, TRUE)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1022_pilots_stabilizing[] = {
	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_PLANE_NOSEDIVING, TRUE, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	restart_timer

	beginloop(0x93)
		if_chr_death_animation_finished(CHR_PILOT1, /*goto*/ 0x2e)
		if_chr_death_animation_finished(CHR_PILOT1, /*goto*/ 0x2e)
		if_chr_death_animation_finished(CHR_PILOT1, /*goto*/ 0x2e)
		goto_next(0x06)

		label(0x2e)
		if_chr_death_animation_finished(CHR_PILOT2, /*goto*/ 0x0e)
		if_chr_death_animation_finished(CHR_PILOT2, /*goto*/ 0x0e)
		if_chr_death_animation_finished(CHR_PILOT2, /*goto*/ 0x0e)

		// Pilots stabilizing
		label(0x06)
		if_stage_flag_eq(STAGEFLAG_PLANE_STABILIZED, TRUE, /*goto*/ 0x0e)
		if_timer_gt(1200, /*goto*/ 0x06)
	endloop(0x93)

	label(0x06)
	show_hudmsg(CHR_BOND, L_RIT_084) // "The pilots have stabilized Air Force One."
	set_stage_flag(STAGEFLAG_PLANE_STABILIZED)

	label(0x0e)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1023_check_pilots_dead[] = {
	beginloop(0x04)
		if_chr_death_animation_finished(CHR_PILOT1, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_PILOT1, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_PILOT1, /*goto*/ 0x2d)
		reloop(0x04)

		label(0x2d)
		if_chr_death_animation_finished(CHR_PILOT2, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_PILOT2, /*goto*/ 0x2d)
		if_chr_death_animation_finished(CHR_PILOT2, /*goto*/ 0x2d)
	endloop(0x04)

	label(0x2d)
	set_stage_flag(STAGEFLAG_PILOTS_DEAD)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

/**
 * Wait until intro finished, then wait several frames before unsetting a flag
 * on Joanna.
 *
 * When the flag is set, the co-op buddy will attempt to warp to Jo. This is
 * needed because Jo can start in two locations in this level, but the buddy
 * only starts in one location.
 *
 * The flag must be unset so the buddy stops attempting to warp.
 */
u8 func1025_disable_buddy_warp[] = {
	yield

	beginloop(0x04)
		if_camera_animating(/*goto*/ 0x2d)
		goto_next(0x06)

		label(0x2d)
	endloop(0x04)

	label(0x06)
	yield
	yield
	yield
	yield
	yield
	yield
	yield
	unset_chr_hiddenflag(CHR_BOND, CHRHFLAG_TRIGGER_BUDDY_WARP)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

u8 func1026_buddy_floor_hatch[] = {
	yield

	beginloop(0x93)
		if_camera_animating(/*goto*/ 0x2d)
		goto_next(0x04)

		label(0x2d)
	endloop(0x93)

	// This flag is set by a global function
	beginloop(0x04)
		if_stage_flag_eq(STAGEFLAG_AI_BUDDY_EXISTS, TRUE, /*goto*/ 0x2d)
	endloop(0x04)

	// Maybe the AI has difficulty opening the floor hatch so they removed it?
	label(0x2d)
	disable_object(OBJ_FLOORHATCH)
	set_object_flag(OBJ_FLOOR_HATCH_DETACHED, OBJFLAG_00000100)
	unset_object_flag2(OBJ_FLOOR_HATCH_DETACHED, OBJFLAG2_INVISIBLE)
	set_ailist(CHR_SELF, GAILIST_IDLE)
	endlist
};

struct ailist ailists[] = {
	{ func1400_setup_counterop,                        0x1400 },
	{ func1001_objectives_failed_msg,                  0x1001 },
	{ func1002_intro,                                  0x1002 },
	{ func1003_rebuild_groups,                         0x1003 },
	{ func1004_reassign_ailists_during_conversation, 0x1004 },
	{ func1005_check_neutrals_killed,                  0x1005 },
	{ func1006_hijack,                                 0x1006 },
	{ func1007_check_pod_destroyed,                    0x1007 },
	{ func1008_check_mine_wasted_bond,                 0x1008 },
	{ func1009_check_end_level,                        0x1009 },
	{ func100a_autopilot_switch,                       0x100a },
	{ func100b_check_president_dead,                   0x100b },
	{ func100c_cockpit,                                0x100c },
	{ func1010_dumbwaiter1,                            0x1010 },
	{ func1011_dumbwaiter2,                            0x1011 },
	{ func1012_check_blondes_dead,                     0x1012 },
	{ func1013_unhide_trent_and_blondes,               0x1013 },
	{ func1014_uncover_disguise,                       0x1014 },
	{ func1015_msg_retrievetheevidence,                0x1015 },
	{ func1016_msg_onthislevel,                        0x1016 },
	{ func1017_msg_gettothecockpit,                    0x1017 },
	{ func1018_msg_maybeamine,                         0x1018 },
	{ func1019_midcutscene,                            0x1019 },
	{ func101a_equipment_switch,                       0x101a },
	{ func101b_hoverbike_switch,                       0x101b },
	{ func101c_check_equipment_switch_destroyed,       0x101c },
	{ func101d_handle_early_president_death,           0x101d },
	{ func101e_blow_mines,                             0x101e },
	{ func101f_setup_rtracker,                         0x101f },
	{ func1420_setup_environment,                      0x1420 },
	{ func1021_check_mine_wasted_coop,                 0x1021 },
	{ func1022_pilots_stabilizing,                     0x1022 },
	{ func1023_check_pilots_dead,                      0x1023 },
	{ func1024_give_objects,                           0x1024 },
	{ func1025_disable_buddy_warp,                     0x1025 },
	{ func1026_buddy_floor_hatch,                      0x1026 },
	{ func1002_intro,                                  0x0c00 },
	{ func1019_midcutscene_from_menu,                  0x0c01 },
	{ func0c02_outro_from_menu,                        0x0c02 },
	{ func0401_init_stripes,                           0x0401 },
	{ func0402_init_elvis,                             0x0402 },
	{ func0403_stripes,                                0x0403 },
	{ func0404_president_running,                      0x0404 },
	{ func0405_president_in_room,                      0x0405 },
	{ func0406_init_president,                         0x0406 },
	{ func0407_steward,                                0x0407 },
	{ func0408_stewardess,                             0x0408 },
	{ func1019_midcutscene,                            0x0424 },
	{ func0409_unused,                                 0x0409 },
	{ func040a_defend_pad,                             0x040a },
	{ func040b_defend_president,                       0x040b },
	{ func040c_init_defend_pad,                        0x040c },
	{ func040d_init_defend_president,                  0x040d },
	{ func040e_unused,                                 0x040e },
	{ func0413_taker,                                  0x0413 },
	{ func100c_cockpit_stripes,                        0x0414 },
	{ func040f_taker1,                                 0x040f },
	{ func0410_taker2,                                 0x0410 },
	{ func0413_taker,                                  0x0413 },
	{ func0411_typing_guy,                             0x0411 },
	{ func0412_sitting_guy,                            0x0412 },
	{ func0426_start_path00,                           0x0426 },
	{ func0427_start_path01,                           0x0427 },
	{ func0428_start_path02,                           0x0428 },
	{ func0429_be_unalert,                             0x0429 },
	{ func042a_init_neutral,                           0x042a },
	{ func042b_reinit_stripes,                         0x042b },
	{ func042c_remove_if_offscreen,                    0x042c },
	{ func0415_cloner1,                                0x0415 },
	{ func0416_init_clone1,                            0x0416 },
	{ func0417_clone1,                                 0x0417 },
	{ func0418_cloner2,                                0x0418 },
	{ func0419_init_clone2,                            0x0419 },
	{ func041a_clone2,                                 0x041a },
	{ func041b_cloner3,                                0x041b },
	{ func041c_init_clone3,                            0x041c },
	{ func041d_clone3,                                 0x041d },
	{ func041e_blonde,                                 0x041e },
	{ func041f_init_blonde,                            0x041f },
	{ func0420_trent_attacking,                        0x0420 },
	{ func0421_trent_waiting,                          0x0421 },
	{ func0422_trent_running,                          0x0422 },
	{ func0423_outro,                                  0x0423 },
	{ func0425_steward_shot,                           0x0425 },
	{ NULL, 0 },
};

struct path paths[] = {
	{ path00, 0, 0 },
	{ path01, 1, 0 },
	{ path02, 2, 0 },
	{ NULL,   0, 0 },
};
